日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Lind.DDD.DynamicModules动态模块化的设计

發(fā)布時(shí)間:2025/4/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lind.DDD.DynamicModules动态模块化的设计 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

回到目錄

在Lind.DDD框架里有Module,主要用于全局自動(dòng)添加的模塊,它類似于ABP系統(tǒng)里的Module,但有時(shí)過(guò)于自動(dòng)化了可能使系統(tǒng)太死板,而有時(shí)將需要的模塊手動(dòng)載入可能對(duì)我們更合適,所以大叔又設(shè)計(jì)了DynamicModules,它在系統(tǒng)初始化時(shí)將需要的模塊進(jìn)行注冊(cè),然后統(tǒng)一使用它即可。

完美的模塊注冊(cè)

//添加默認(rèn)模塊和全局模塊var config = DynamicModule.Create().RegisterGlobalModule().UseLogger().UseMessaging().UseCache();//添加自定義模塊config.RegisterGenericModule(typeof(IExtensionRepository<>), typeof(EFRepository<>));

模塊的使用

//使用模塊 var logger = LindContainer.Container.Resolve<ILogger>(); var message = LindContainer.Container.Resolve<IMessageManager>(); var repository = LindContainer.Container.Resolve<IExtensionRepository<UserInfo>>(); var cache = LindContainer.Container.Resolve<ICache>();

在一個(gè)WEB程序里,我們經(jīng)過(guò)來(lái)模塊注冊(cè)的代碼放在global里,在程序啟動(dòng)時(shí)一次性加載即可,在模塊使用時(shí),可以在需要的地方直接調(diào)用它,而在程序的設(shè)計(jì)上,主要有容器,動(dòng)態(tài)模塊管理和動(dòng)態(tài)模塊擴(kuò)展組成,下面分別看一下實(shí)現(xiàn)的邏輯!

動(dòng)態(tài)容器

使用autofac實(shí)現(xiàn),主要用來(lái)存儲(chǔ)對(duì)象的生命周期,一個(gè)對(duì)象的注冊(cè),生產(chǎn)和銷毀都在這里實(shí)現(xiàn)

/// <summary>/// Lind框架對(duì)象容器/// </summary>public class LindContainer{/// <summary>/// 容器的生產(chǎn)者/// </summary>public static ContainerBuilder Instance{get{if (instance == null){lock (lockObj){if (instance == null)instance = new ContainerBuilder();}}return instance;}}/// <summary>///容器的消費(fèi)者/// </summary>public static IContainer Container{get{if (container == null){lock (lockObj){if (container == null)container = instance.Build();}}return container;}}static IContainer container;static ContainerBuilder instance;static object lockObj = new object();}

動(dòng)態(tài)模塊管理者

主要提供了注冊(cè),生產(chǎn)等功能,這里我們可以擴(kuò)展出一個(gè)泛型對(duì)象和普通對(duì)象的注冊(cè)邏輯,在容器設(shè)計(jì)上我們使用了單例來(lái)存儲(chǔ),避免過(guò)多的開(kāi)銷

/// <summary>/// 設(shè)計(jì)一個(gè)模塊化注冊(cè)機(jī)制/// </summary>public class DynamicModule{public static DynamicModule Instance { get; private set; }private DynamicModule() { }static ContainerBuilder builder;public static DynamicModule Create(){Instance = new DynamicModule();return Instance;}/// <summary>/// 注冊(cè)全局組件/// </summary>/// <returns></returns>public DynamicModule RegisterGlobalModule(){this.RegisterModule<ILogger, NormalLogger>();return this;}/// <summary>/// 注冊(cè)泛型類型/// </summary>/// <typeparam name="TService">接口</typeparam>/// <typeparam name="TImplement">實(shí)現(xiàn)</typeparam>/// <returns></returns>public DynamicModule RegisterGenericModule(Type service, Type implement){LindContainer.Instance.RegisterGeneric(implement).As(service);return this;}/// <summary>/// 注冊(cè)普通類型/// </summary>/// <typeparam name="TService"></typeparam>/// <typeparam name="TImplement"></typeparam>/// <returns></returns>public DynamicModule RegisterModule<TService, TImplement>()where TService : classwhere TImplement : TService{LindContainer.Instance.RegisterType(typeof(TImplement)).As(typeof(TService));return this;}}

模塊的擴(kuò)展程序

主要提供了Lind.DDD里的一些模塊的注冊(cè)入口,方便大家以后的注冊(cè)過(guò)程,實(shí)質(zhì)上就是.net里的擴(kuò)展方法,這個(gè)在.net平臺(tái)得到了廣泛的應(yīng)用!

/// <summary>/// 模塊化擴(kuò)展/// </summary>public static class DynamicModuleExtensions{/// <summary>/// logger/// </summary>/// <param name="configuration"></param>/// <returns></returns>public static DynamicModule UseLogger(this DynamicModule configuration){configuration.RegisterModule<ILogger, NormalLogger>();return configuration;}/// <summary>/// message/// </summary>/// <param name="configuration"></param>/// <returns></returns>public static DynamicModule UseMessaging(this DynamicModule configuration){configuration.RegisterModule<IMessageManager, EmptyMessageManager>();return configuration;}/// <summary>/// cache/// </summary>/// <param name="configuration"></param>/// <returns></returns>public static DynamicModule UseCache(this DynamicModule configuration){configuration.RegisterModule<Lind.DDD.Caching.ICache, Lind.DDD.Caching.RedisCache>();return configuration;}}

對(duì)于一種技術(shù)的研究,思考決定了你對(duì)這種技術(shù)理解的深度!

感謝湯雪華大師的ECommon,從中也得到了不少啟發(fā),還有微信的.net core架構(gòu)理解也很新穎!

感謝各位的閱讀!

回到目錄

?

轉(zhuǎn)載于:https://www.cnblogs.com/lori/p/6647229.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Lind.DDD.DynamicModules动态模块化的设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。