回到目录

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" ...

  3. matlab 数值解 期权顶级啊,潮盈期权院高胜率交易技巧系列之二----期权交易策略及基于MATLAB统计套利介绍...

    主题: 高胜率交易技巧系列之二----期权交易策略及基于MATLAB统计套利介绍 会场流程: 13:30--14:00:参会嘉宾到场签名 14:00--14:45:期权知识 14:45--15:·25 ...

  4. spring基础Bean管理基于xml注入

    1.基于xml注入属性 1.什么是Bean管理 Bean管理指的是两个操作 (1) Spring创建对象 (2) Spirng注入属性 2.Bean管理操作有两种方式 (1)基于xml配置文件方式实现 ...

  5. SSM源码分析之Spring05-DI实现原理(基于Annotation 注入)

    目录导航 前言 注解的引入 AnnotationConfigApplicationContext 对注解Bean初始化 AnnotationConfigApplicationContext注册注解Be ...

  6. matlab 谐波注入,一种基于谐波注入的新能源汽车永磁同步电机噪声控制方法与流程...

    本发明属于新能源汽车技术领域,特别是指一种基于谐波注入的新能源汽车电机噪声控制的方法. 背景技术: 新能源汽车电机在工作时产生的噪声是气动噪声.电磁噪声和机械噪声共同的叠加,其中电磁噪声能量占其中的较 ...

  7. “基于模块化自动驾驶底盘的PIX移动空间”发布

    "基于模块化自动驾驶底盘的PIX移动空间"发布 本报道转载自数博发布 7月27日下午,在由中国国际大数据产业博览会执委会主办的2020"数博发布"活动中,一款似 ...

  8. 连傻瓜都能看懂的基于代码注入的线程守护技术

    连傻瓜都能看懂的基于代码注入的线程守护技术 2010年08月31日 连傻瓜都能看懂的基于代码注入的线程守护技术 Author: 叶紫孤(CPP肥兔) (感谢冷风大哥提供技术支持) E-mail: ye ...

  9. 嵌入式学习笔记——基于Cortex-M的单片机介绍

    基于Cortex-M的单片机介绍 前言 1生产厂商及其产品线 1.1ARM单片机的产品线 1.2命名规则 作业1 2习单片机的资料准备 2.1STM32开发所需手册 2.1.1芯片的数据手册 芯片基本 ...

最新文章

  1. 依赖注入及AOP简述(六)——字符串请求模式 .
  2. Project: Individual Project - Word frequency program----11061192zmx
  3. vins中imu融合_视觉和imu融合的算法研究
  4. ps cc 生成html,使用photoshop生成网页的方法
  5. 下载css-loader 安装及使用
  6. Focal Loss-RetinaNet算法解析
  7. WinApi学习笔记-内存管理
  8. 华为网络设备加固各种基线命令配置
  9. 安卓Activity的生命周期函数详解
  10. ML-Agents案例之地牢逃脱
  11. TVS管好,还是稳压二极管好?
  12. vscode Android调试
  13. Git学习笔记(复习专用,B站狂神说)
  14. batocera笔记本调节亮度教程
  15. 特别报道:人工智能 让机器像人一般思考
  16. 如何关闭iPhone打电话时音频里面的Mac选项
  17. 精通matlab神经网络.pdf,精通MATLAB神经网络 (朱凯、王正林) PDF_人工智能教程...
  18. 重组es6之es6转es5的方式
  19. java体系结构最下层_JAVA的体系结构中,最下层是(),由适配器和JAVA OS组成,保证JAVA体系结构可以跨平台。...
  20. BOM——浏览器对象模型(1)

热门文章

  1. 儿童高脚椅、餐椅安全标准ASTM F404
  2. java获取和风天气_SpringMVC结合天气api实现天气查询
  3. PyQt5+fitz实现图片与PDF互相转换
  4. android原生vr相机,谷歌最新应用让Android手机秒变VR相机
  5. Android 自定义scheme及多端唤起使用方法
  6. 加密行业存在大量“违规行为”?全球加速整治,监管或将进入新时代
  7. [从零开始学习FPGA编程-7]:快速入门篇 - 总体 - FPGA产品开发简化流程、关键步骤解读
  8. edge microsoff 连不上网_网站还原错误怎么办
  9. lisp语言与python_又要头秃?2020 年七大 AI 编程语言大盘点
  10. 当当狸智能显微镜单体轻巧便携