LindDotNetCore~基于模块化注入的介绍

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);
    }

    待续...

原文地址:https://www.cnblogs.com/lori/p/8207142.html

时间: 2024-10-17 02:50:49

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

《基于模块化的前端开发框架的研究与实现》 论文阅读(十三)

一.基本信息 标题:基于Web前端的性能优化方案研究 时间:2017 来源:北京邮电大学 关键词:Web前端:模块化:JavaScript:Node.js:前端模板 二.研究内容 1.主要内容: 1.1研究背景与意义当今互.联网飞速发展,网络用户的需求变化既快又大,大部分网站的更新周期都是以日,小时甚至分钟为单位,在这种情况下,网站的前端就成了变化最频繁的部分川.随着互联网公司对前端开发的逐渐重视,前端开发人数也越来越多,但是技术人员的投入总是有限的,而前端开发领城并没有为开发者们提供一-种简洁

XPATH 注入的介绍与代码防御

0x01 介绍 软件未正确对 XML 中使用的特殊元素进行无害化处理,导致攻击者能够在终端系统处理 XML 的语法.内容或命令之前对其进行修改.在 XML 中,特殊元素可能包括保留字或字符,例如“<”.“>”.“"”和“&”,它们可能用于添加新数据或修改 XML 语法.我们发现用户可控制的输入并未由应用程序正确进行无害化处理,就在 XPath 查询中使用.例如,假定 XML 文档包含“user”名称的元素,每个元素各包含 3 个子元素 -“name”.“password”和

WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门参考大量前辈们的心得,小小的总结一下,欢迎大家拍砖啊 一.跨站脚本攻击(XSS) 跨站脚本攻击的原理 XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时

PDO防止SQL注入具体介绍

<span style="font-size:18px;"><?php $dbh = new PDO("mysql:host=localhost; dbname=demo", "user", "pass"); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果 $dbh->exec(

PDO防止SQL注入详细介绍

<span style="font-size:18px;"><?php $dbh = new PDO("mysql:host=localhost; dbname=demo", "user", "pass"); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); //禁用prepared statements的仿真效果 $dbh->exec(

基于HTTP 协议认证介绍与实现

导言 一直对http 的头认证有兴趣,就是路由器的那种弹出对话框输入账号密码怎么实现一直不明白,最近,翻了一下http 协议,发现这是一个RFC 2617的实现,所以写篇文章介绍一下吧. Http基本认证 这是一个用于web浏览器或其他客户端在请求时提供用户名和密码的登录认证,要实现这个认证很简单: 我们先来看下协议里面怎么定义这个认证的. 1. 编码: 将用户名 追加一个 冒号(':')接上密码,把得出的结果字符串在用Base64算法编码. 请求头: Authorization: 认证类型 编

AngularJS基于模块化的MVC实现

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>AngularJS双向数据绑定</title> 6 <script type="text/javascript" src="../js/angular.min.js"></script> 7 </head&g

模块化数据中心介绍

模块化数据中心是指每个模块具有独立的功能.统一的输入输出接口,不同区域的模块可以互相备份,通过相关模块的排列组合形成一个完整的数据中心.模块化的形式有很多种,可以是设计方法和理念,也可以是产品. 在模块化设计方法上,包括在空间布置上采用模块化设计,同时数据中心各功能系统上也采用模块化设计,在建造时可分模块.分楼层.分期建设.在产品形式上,数据中心模块化有几种形式:模块化产品.微模块(Micro Module)和集装箱式数据中心. 其中,模块化产品以模块化UPS.模块化精密空调.模块化布线等为代表

Prism4 文档翻译系列---第4章 模块化应用程序开发

模块化应用程序是指将一个应用程序拆分成一系列的可以组合的功能单元.一个客户端模块封装了应用程序的一部分,并且通常是一系列相关的关注点.它可以包含一个相关的组件的集合,就像用户界面,应用程序功能,和一些业务逻辑,以及一些应用程序基础模块,比如应用程序级的日至服务或者用户认证.模块之间是相互独立的但是可以通过松耦合的手段进行通信.模块化的应用程序是的开发.测试.部署和扩展变得更新容易. 例如,一个个人银行应用程序,用户可以使用各种各样的功能,比如账户间汇款,支付,从个人的界面中更新个人信息等.然而,