回到目录

LindDotNetCore相关介绍

相关模块

  1. 全局都是依赖DI
  2. 消息队列
  3. NoSql
  4. Caching
  5. 仓储
  6. 服务总线
  7. Solr
  8. 调度
  9. 日志
  10. Asspect拦截组件
  11. UAA授权
  12. 各种组件环境的搭建
  13. 各模块单元测试编写

DI统一战线

LindDotNet框架同样采用了全局DI注入的方式来使用模块对象的,这种松耦合的设计对于单元测试

是很方便人。

services.AddLog4Logger(o =>
{
o.Log4ConfigFileName = "log4.config";
o.ProjectName = "test";
});
services.UseDapper(o =>
{
o.ConnString = $"Data Source=/Data/intergratetest.db";
o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite;
});

消息队列

消息队列主要使用'rabbitmq,kafka'实现的,用来解耦项目,处理高并发任务和耗时任务,生产者

不需要关心是谁来消费,它只管把消息发到队列中;而消费者不关心消息如何产生,只把消费按着

业务逻辑去处理掉!

services.AddRabbitMQ(o =>
{
o.ExchangeName = "zzl";
o.MqServerHost = "192.168.200.214";
o.VirtualHost = "/";
o.ExchangeType = "topic";
});

NoSql

目前框架的NoSql部分由redis和mongodb组成,之所有选择这两种框架最大的原因就是它们覆盖了

NoSql所有的使用场景,像redis用来存储k/v键值对,支持5大数据结构;而mongodb用来存储文档

型数据,支持复杂的查询,嵌套查询等。

services.AddRedis(o =>
{
o.Host = "localhost:6379";
o.AuthPassword = "";
o.IsSentinel = 1;
o.ServiceName = "mymaster";
o.Proxy = 0;
});

Caching

数据缓存是比较重要的部分,用来存储一些热数据,目前分布式环境使用redis,单机可以直接使用

运行时缓存。

services.AddRuntimeCache(o =>
{
o.CacheKey = "lindCache";
o.ExpireMinutes = 5;
});

仓储

仓储主要简化数据持久化的操作,对外提供简单的CURD操作接口,使用者直接调用即可,不需要干预SQL语句,

从这点上来说,开发效率确实提升了不少。目前大叔框架里集成了ef,dapper,mongodb,redis,elastic等仓储,其中

EF和Dapper可以操作sqlserver,mysql,sqllite等数据库。

services.UseDapper(o =>
{
o.ConnString = $"Data Source={Directory.GetCurrentDirectory()}/intergratetest.db";
o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite;
});

服务总线

服务总线主要是用来解耦项目的层与层之间的调用,让程序员把关注点放在业务上,目前框架提供了IOC模式的事件,

基于简单内存字典存储的事件等。

services.AddIocBus();
services.AddInMemoryBus();

Solr

Solr是在Lucene基础之前开发的,使用java编写,一般部署在tomcat上,有自己的图像管理界面,可以用来管理core,

一般地,我们在设计一个core时,需要为它建立对应的实体,与它的core里的属性对应起来;solr有丰富的插件,像一些

中文分词包,索引包等。

services.AddSolrNet(o =>
{
o.ServerUrl = "http://192.168.200.214:8081/solr/system_companysubject";
o.UserName = "sa";
o.Password = "sa";
});

调度服务

调度服务是以quartz为核心,并对它的功能进行了封装,支持实时添加的任务,这一点使用了windows/linux的目录监控事件

,也是.netcore帮我们实现的,我们只需要订阅相关事件即可。

var watcher = new FileSystemWatcher
{
Path = AppDomain.CurrentDomain.BaseDirectory,
NotifyFilter = NotifyFilters.Attributes |
NotifyFilters.CreationTime |
NotifyFilters.DirectoryName |
NotifyFilters.FileName |
NotifyFilters.LastAccess |
NotifyFilters.LastWrite |
NotifyFilters.Security |
NotifyFilters.Size,
Filter = "*.dll"
};
// quartz运行时,可以添加新job,但不能覆盖,删除等
watcher.Created += new FileSystemEventHandler((o, e) =>
{
foreach (var module in Assembly.LoadFile(e.FullPath).GetModules())
{
foreach (var type in module.GetTypes().Where(i => typeof(ISchedulingJob).IsAssignableFrom(i)))
{
JoinToQuartz(type, DateTimeOffset.Now);
}
}
});
//Start monitoring.
watcher.EnableRaisingEvents = true;

日志

日志框架与之前的Lind框架里日志差别不大,只是把对象的生命周期移到了DI容器去统一管理,都采用单例方式,目前日志框架提供了

对log4net的支持,同时轻量级日志可以使用lindlogger来实现。

services.AddLog4Logger(o =>
{
o.Log4ConfigFileName = "log4.config";
o.ProjectName = "test";
});

Asspect拦截组件

方法拦截在微软mvc,api框架里应用十分广泛,可以在方法执行前与执行后动态添加一切逻辑,而不需要关注方法细节,实现拦截行为

的开发人员不需要去关注方法细节,这利用了面向对象的封装特性,而也符合开闭原则,因为你可以在不修改原来代码的情况下,动态

为它添加行为。

[Fact]
public void FuncInvoke()
{
var obj = ProxyFactory.CreateProxy<AspectTest, AspectTest>();
Assert.Equal("OK", obj.GetHello());
}
[Fact]
public void ActionInvoke()
{
var obj = ProxyFactory.CreateProxy<AspectTest, AspectTest>();
obj.SetHello();
Assert.Equal(1, 1);
}

待续...

回到目录

LindDotNetCore~基于模块化注入的介绍的更多相关文章

  1. [Android]使用Dagger 2依赖注入 - DI介绍(翻译)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...

  2. AngularJS基于模块化的MVC实现

    AngularJS基于模块化的MVC实现 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  3. 基于jQuery HTML5人物介绍卡片特效

    基于jQuery HTML5人物介绍卡片特效.这是一款基于jquery.material-cards插件实现的人物介绍卡片形式特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码 ...

  4. Python 基于python操纵zookeeper介绍

    基于python操纵zookeeper介绍 by:授客  QQ:1033553122 测试环境 Win7 64位 Python 3.3.4 kazoo-2.6.1-py2.py3-none-any.w ...

  5. SQL注入 (1) SQL注入类型介绍

    SQL注入 SQL注入介绍与分类 1. 什么是sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 2. sql注入类型 按照注入 ...

  6. XPATH 注入的介绍与代码防御

    0x01 介绍 软件未正确对 XML 中使用的特殊元素进行无害化处理,导致攻击者能够在终端系统处理 XML 的语法.内容或命令之前对其进行修改.在 XML 中,特殊元素可能包括保留字或字符,例如“&l ...

  7. Spring基于 Annotation 的简单介绍

    tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial"> 1.使用 @ ...

  8. SQL注入之Sqli-labs系列第四十一关(基于堆叠注入的盲注)和四十二关四十三关四十四关四十五关

    0x1普通测试方式 (1)输入and1=1和and1=2测试,返回错误,证明存在注入 (2)union select联合查询 (3)查询表名 (4)其他 payload: ,( ,( 0x2 堆叠注入 ...

  9. Spring基于注解注入的两种方式

    1.@Autowried 1)默认基于类型查找容器的的Bean进行注入(注入的Bean的实现类是唯一的). 2)当实现类的Bean大于一个的时候,需结合@Qualifier,根据Bean的名称来指定需 ...

随机推荐

  1. 腾讯 AI Lab 计算机视觉中心人脸 & OCR团队近期成果介绍(3)

    欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:周景超 在上一期中介绍了我们团队部分已公开的国际领先的研究成果,近期我们有些新的成果和大家进一步分享. 1 人脸进展 人脸是最重要的视觉 ...

  2. 38.Linux驱动调试-根据系统时钟定位出错位置

    当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的? 答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便 ...

  3. Date( )方法 章节中,你可以查看更多关于日期转换为字符串的函数

    在 Date 方法 章节中,你可以查看更多关于日期转换为字符串的函数: 方法 描述 getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象 ...

  4. 关于sqlmap使用手册

    sqlmap 使用手册 官方wiki Github sqlmap也是渗透中常用的一个注入工具,可以用来检测sql注入漏洞. 功能与作用 完全支持MySQL,Oracle,PostgreSQL,Micr ...

  5. java傻瓜简单100%一定看的懂新手安装教程

    1.java官网   最新的不是很稳定 http://www.oracle.com/technetwork/java/javase/downloads/index.html 一直点下一步就可以,但别忘 ...

  6. http请求HttpClient短信接口

    项目中安全设置找回密码的功能,需要通过发送短信验证绑定手机,通过绑定的手机号验证并重新设置密码. 因为项目是通过maven管理的,所以需要在pom.xml文件中引入jar包, maven引入的jar包 ...

  7. 用KMP算法实现strStr()

    strStr()函数的用途是在一个字符串S中寻找某个字串P第一次出现的位置.并返回其下标,找不到时返回-1.最简单的办法就是找出S全部的子串和P进行比較,然而这种方法比較低效.假设我们从S的下标0和P ...

  8. UVA - 11396 Claw Decomposition(二分图染色)

    题目大意:给你一张无向图,每一个点的度数都是3. 你的任务是推断是否能把它分解成若干个爪(每条边仅仅能属于一个爪) 解题思路:二分图染色裸题.能够得出:爪的中心点和旁边的三个点的颜色是不一样的 #in ...

  9. TortoiseSVN的安装和使用

    TortoiseSVN是windows平台下Subversion的免费开源client. 一般我们都是先讲讲server的配置.然后再讲client的使用,可是在TortoiseSVN上.却能够反过来 ...

  10. 有限等距性质RIP

    参考博客:http://blog.csdn.net/jbb0523/article/details/44565647 压缩感知测量矩阵之有限等距性质(Restricted Isometry Prope ...