LindDotNetCore~基于模块化注入的介绍
回到目录
LindDotNetCore相关介绍
相关模块
- 全局都是依赖DI
- 消息队列
- NoSql
- Caching
- 仓储
- 服务总线
- Solr
- 调度
- 日志
- Asspect拦截组件
- UAA授权
- 各种组件环境的搭建
各模块单元测试编写
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~基于模块化注入的介绍相关推荐
- [Android]使用Dagger 2依赖注入 - DI介绍(翻译)
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5092083.html 使用Dagger 2依赖注入 - DI介 ...
- AngularJS基于模块化的MVC实现
AngularJS基于模块化的MVC实现 <!DOCTYPE html> <html><head><meta charset="UTF-8" ...
- matlab 数值解 期权顶级啊,潮盈期权院高胜率交易技巧系列之二----期权交易策略及基于MATLAB统计套利介绍...
主题: 高胜率交易技巧系列之二----期权交易策略及基于MATLAB统计套利介绍 会场流程: 13:30--14:00:参会嘉宾到场签名 14:00--14:45:期权知识 14:45--15:·25 ...
- spring基础Bean管理基于xml注入
1.基于xml注入属性 1.什么是Bean管理 Bean管理指的是两个操作 (1) Spring创建对象 (2) Spirng注入属性 2.Bean管理操作有两种方式 (1)基于xml配置文件方式实现 ...
- SSM源码分析之Spring05-DI实现原理(基于Annotation 注入)
目录导航 前言 注解的引入 AnnotationConfigApplicationContext 对注解Bean初始化 AnnotationConfigApplicationContext注册注解Be ...
- matlab 谐波注入,一种基于谐波注入的新能源汽车永磁同步电机噪声控制方法与流程...
本发明属于新能源汽车技术领域,特别是指一种基于谐波注入的新能源汽车电机噪声控制的方法. 背景技术: 新能源汽车电机在工作时产生的噪声是气动噪声.电磁噪声和机械噪声共同的叠加,其中电磁噪声能量占其中的较 ...
- “基于模块化自动驾驶底盘的PIX移动空间”发布
"基于模块化自动驾驶底盘的PIX移动空间"发布 本报道转载自数博发布 7月27日下午,在由中国国际大数据产业博览会执委会主办的2020"数博发布"活动中,一款似 ...
- 连傻瓜都能看懂的基于代码注入的线程守护技术
连傻瓜都能看懂的基于代码注入的线程守护技术 2010年08月31日 连傻瓜都能看懂的基于代码注入的线程守护技术 Author: 叶紫孤(CPP肥兔) (感谢冷风大哥提供技术支持) E-mail: ye ...
- 嵌入式学习笔记——基于Cortex-M的单片机介绍
基于Cortex-M的单片机介绍 前言 1生产厂商及其产品线 1.1ARM单片机的产品线 1.2命名规则 作业1 2习单片机的资料准备 2.1STM32开发所需手册 2.1.1芯片的数据手册 芯片基本 ...
最新文章
- 依赖注入及AOP简述(六)——字符串请求模式 .
- Project: Individual Project - Word frequency program----11061192zmx
- vins中imu融合_视觉和imu融合的算法研究
- ps cc 生成html,使用photoshop生成网页的方法
- 下载css-loader 安装及使用
- Focal Loss-RetinaNet算法解析
- WinApi学习笔记-内存管理
- 华为网络设备加固各种基线命令配置
- 安卓Activity的生命周期函数详解
- ML-Agents案例之地牢逃脱
- TVS管好,还是稳压二极管好?
- vscode Android调试
- Git学习笔记(复习专用,B站狂神说)
- batocera笔记本调节亮度教程
- 特别报道:人工智能 让机器像人一般思考
- 如何关闭iPhone打电话时音频里面的Mac选项
- 精通matlab神经网络.pdf,精通MATLAB神经网络 (朱凯、王正林) PDF_人工智能教程...
- 重组es6之es6转es5的方式
- java体系结构最下层_JAVA的体系结构中,最下层是(),由适配器和JAVA OS组成,保证JAVA体系结构可以跨平台。...
- BOM——浏览器对象模型(1)
热门文章
- 儿童高脚椅、餐椅安全标准ASTM F404
- java获取和风天气_SpringMVC结合天气api实现天气查询
- PyQt5+fitz实现图片与PDF互相转换
- android原生vr相机,谷歌最新应用让Android手机秒变VR相机
- Android 自定义scheme及多端唤起使用方法
- 加密行业存在大量“违规行为”?全球加速整治,监管或将进入新时代
- [从零开始学习FPGA编程-7]:快速入门篇 - 总体 - FPGA产品开发简化流程、关键步骤解读
- edge microsoff 连不上网_网站还原错误怎么办
- lisp语言与python_又要头秃?2020 年七大 AI 编程语言大盘点
- 当当狸智能显微镜单体轻巧便携