回到目录

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. Linux下如何彻底删除MySQL

    1.查找以前是否装有mysql 命令:rpm -qa|grep -i mysql可以看到如下图的所示: 说明之前安装了:MySQL-client-5.5.25a-1.rhel5MySQL-server ...

  2. TensorFlow MNIST(手写识别 softmax)实例运行

    TensorFlow MNIST(手写识别 softmax)实例运行 首先要有编译环境,并且已经正确的编译安装,关于环境配置参考:http://www.cnblogs.com/dyufei/p/802 ...

  3. Java实现字符串转换十六进制MD5值

    public class Encode {    public final static String md5(String s) {        char hexDigits[] = { '0', ...

  4. java学习笔记之System类

    System类常用总结 System类概述 java.lang.System类,系统属性信息工具类 常用静态方法: 1. public static long currentTimeMillis() ...

  5. Python爬虫(十二)_XPath与lxml类库

    Python学习指南 有同学说,我正则用的不好,处理HTML文档很累,有没有其他的方法? 有!那就是XPath,我们可以用先将HTML文档转换成XML文档,然后用XPath查找HTML节点或元素. 什 ...

  6. ubuntu 一些琐碎知识

    2017/09/01 ubuntu下面配置git公钥 $ git config --global user.name "Your Name" $ git config --glob ...

  7. UML总结复习指南

    用例图 1. 參与者(Actor) 表示与您的应用程序或系统进行交互的用户.组织或外部系统.用一个小人表示.   2. 用例(Use Case)   用例就是外部可见的系统功能,对系统提供的服务进行描 ...

  8. HTML: width,height

    在进行前端页面开发时,width(width,offsetWidth,scrollWidth,clientWidth)height(height,offsetHeight,scrollHeight,c ...

  9. 微信小程序——轮播图实现

    小程序的轮播图,也就是他其中的一个控件可以算是直接上代码: 这是WXML 页面 代码: <view class='carousel_div'> <swiper class=" ...

  10. Android项目实战(三十九):Android集成Unity3D项目(图文详解)

    需求: Unity3D 一般用于做游戏 而且是跨平台的.原本设计是Android 应用端A(原生开发)进行一些业务处理,最后由A 打开Android 应用端B(Unity3D 游戏开发)进行游戏操作. ...