回到目錄html
LindDotNet框架一樣採用了全局DI注入的方式來使用模塊對象的,這種鬆耦合的設計對於單元測試
是很方便人。java
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'實現的,用來解耦項目,處理高併發任務和耗時任務,生產者
不須要關心是誰來消費,它只管把消息發到隊列中;而消費者不關心消息如何產生,只把消費按着
業務邏輯去處理掉!mysql
services.AddRabbitMQ(o => { o.ExchangeName = "zzl"; o.MqServerHost = "192.168.200.214"; o.VirtualHost = "/"; o.ExchangeType = "topic"; });
目前框架的NoSql部分由redis和mongodb
組成,之全部選擇這兩種框架最大的緣由就是它們覆蓋了
NoSql全部的使用場景,像redis用來存儲k/v鍵值對,支持5大數據結構;而mongodb用來存儲文檔
型數據,支持複雜的查詢,嵌套查詢等。linux
services.AddRedis(o => { o.Host = "localhost:6379"; o.AuthPassword = ""; o.IsSentinel = 1; o.ServiceName = "mymaster"; o.Proxy = 0; });
數據緩存是比較重要的部分,用來存儲一些熱數據,目前分佈式環境使用redis,單機能夠直接使用
運行時緩存。程序員
services.AddRuntimeCache(o => { o.CacheKey = "lindCache"; o.ExpireMinutes = 5; });
倉儲主要簡化數據持久化的操做,對外提供簡單的CURD操做接口,使用者直接調用便可,不須要干預SQL語句,
從這點上來講,開發效率確實提高了很多。目前大叔框架裏集成了ef,dapper,mongodb,redis,elastic
等倉儲,其中
EF和Dapper能夠操做sqlserver,mysql,sqllite等數據庫。redis
services.UseDapper(o => { o.ConnString = $"Data Source={Directory.GetCurrentDirectory()}/intergratetest.db"; o.DbType = Lind.DotNetCore.Repository.DbType.SqlLite; });
服務總線主要是用來解耦項目的層與層之間的調用,讓程序員把關注點放在業務上,目前框架提供了IOC模式的事件,
基於簡單內存字典存儲的事件等。sql
services.AddIocBus(); services.AddInMemoryBus();
Solr是在Lucene
基礎以前開發的,使用java編寫,通常部署在tomcat上,有本身的圖像管理界面,能夠用來管理core,
通常地,咱們在設計一個core時,須要爲它創建對應的實體,與它的core裏的屬性對應起來;solr有豐富的插件,像一些
中文分詞包,索引包等。mongodb
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來實現。c#
services.AddLog4Logger(o => { o.Log4ConfigFileName = "log4.config"; o.ProjectName = "test"; });
方法攔截在微軟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); }
待續...
回到目錄