模塊的定義Silky是一個包括多個nuget包構成的模塊化的框架,每個模塊將程序劃分為一個個小的結構,在這個結構中有著自己的邏輯代碼和自己的作用域,不會影響到其他的結構 。
模塊類一般地,一個模塊的定義是通過在該程序集內創建一個派生自 SilkyModule的類,如下所示:
public class RpcModule : SilkyModule{}SilkyModule是一個抽象的類,它定義了模塊的基礎方法,體現了模塊在框架中的作用;
SilkyModule模塊定義的核心代碼如下所示:
public abstract class SilkyModule : Autofac.Module, ISilkyModule, IDisposable{protected SilkyModule(){Name = GetType().Name.RemovePostFix(StringComparison.OrdinalIgnoreCase, "Module");}protected override void Load([NotNull] ContainerBuilder builder){base.Load(builder);RegisterServices(builder);}public virtual void ConfigureServices(IServiceCollection services, IConfiguration configuration){}protected virtual void RegisterServices([NotNull] ContainerBuilder builder){}public virtual Task Initialize([NotNull] ApplicationContext applicationContext){return Task.CompletedTask;}public virtual Task Shutdown([NotNull] ApplicationContext applicationContext){return Task.CompletedTask;}public virtual string Name { get; }// 其他代碼略...}通過對SilkyModule模塊代碼定義的分析我們可以得知,一個Silky模塊有如下幾個作用:
- 在
ConfigureServices()方法中,通過IServiceCollection實現服務注冊;
- 在
RegisterServices()方法中,通過ContainerBuilder實現服務注冊;
- 在應用程序啟動時,通過
Initialize()方法實現模塊的初始化方法;
- 在應用程序停止時,執行
Shutdown()方法,可以實現模塊資源的釋放;
Initialize()方法或是在停止時執行Shutdown()方法呢?在構建服務引擎一章中,我們提到,在構建服務引擎時,我們有一項很重要的工作就是注冊了InitSilkyHostedService后臺任務 。
后臺任務
InitSilkyHostedService的源碼如下所示:public class InitSilkyHostedService : IHostedService{private readonly IModuleManager _moduleManager;private readonly IHostApplicationLifetime _hostApplicationLifetime;public InitSilkyHostedService(IServiceProvider serviceProvider,IModuleManager moduleManager,IHostApplicationLifetime hostApplicationLifetime){if (EngineContext.Current is SilkyEngine){EngineContext.Current.ServiceProvider = serviceProvider;}_moduleManager = moduleManager;_hostApplicationLifetime = hostApplicationLifetime;}public async Task StartAsync(CancellationToken cancellationToken){Console.WriteLine(@"________/ ____|(_)| || | | (____ | || | __ __\___ \ | || || |/ /| | | |____) || || ||< | |_| | |_____/ |_||_||_|\_\ \__, |__/ ||___/");var version = Assembly.GetExecutingAssembly().GetName().Version;var ver = $"{version.Major}.{version.Minor}.{version.Build}";Console.WriteLine($" :: Silky ::{ver}");_hostApplicationLifetime.ApplicationStarted.Register(async () =>{await _moduleManager.InitializeModules();});}public async Task StopAsync(CancellationToken cancellationToken){_hostApplicationLifetime.ApplicationStopped.Register(async () =>{await _moduleManager.ShutdownModules();});}}- 在后臺任務
StartAsync(),在打印Silky的banner后,在應用啟動時注冊一個回調方法,通過模塊管理器IModuleManager執行初始化模塊方法;
- 在后臺任務
StopAsync(),在應用停止后注冊一個回調方法,通過模塊管理器IModuleManager執行關閉模塊方法,一般用于各個模塊的資源釋放;
經驗總結擴展閱讀
- 國慶節微信祝福語簡短
- 木簽子可以放微波爐嗎
- 一路向陽的微信簽名 簡短的簽名很走心
- 一篇文章帶你了解輕量級Web服務器——Nginx簡單入門
- 一次性飯盒能放微波爐嗎
- 20句 喬遷祝福2023年喬遷新居賀詞
- 如何轉賬到支付寶(支付寶不綁卡怎么把錢轉到微信)
- 哪些星座女在愛情里謹小慎微
- iphone12有無線充電嗎_iphone12可以使用無線充電嗎
- Seata 環境搭建
