構(gòu)建服務(wù)引擎在注冊Silky微服務(wù)應(yīng)用一節(jié)中,我們了解到在ConfigureServices階段,通過IServiceCollection的擴展方法AddSilkyServices<T>()除了注冊必要的服務(wù)之外,更主要的是構(gòu)建了服務(wù)引擎(IEngine) 。
下面,我們學(xué)習(xí)在IServiceCollection的擴展方法AddSilkyServices<T>()中完成了什么樣的工作 。如下所示的代碼為在包 Silky.Core 的 ServiceCollectionExtensions.cs中提供的擴展方法AddSilkyServices<T>() 。
public static IEngine AddSilkyServices<T>(this IServiceCollection services, IConfiguration configuration,IHostEnvironment hostEnvironment) where T : StartUpModule{ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 指定通信管道的加密傳輸協(xié)議CommonSilkyHelpers.DefaultFileProvider = new SilkyFileProvider(hostEnvironment); // 構(gòu)建文件服務(wù)提供者services.TryAddSingleton(CommonSilkyHelpers.DefaultFileProvider);// 向services注冊單例的文件服務(wù)提供者var engine = EngineContext.Create(); // 創(chuàng)建單例的服務(wù)引擎services.AddOptions<AppSettingsOptions>().Bind(configuration.GetSection(AppSettingsOptions.AppSettings)); // 新增AppSettingsOptions配置var moduleLoader = new ModuleLoader(); // 創(chuàng)建模塊加載器engine.LoadModules<T>(services, moduleLoader); // 加載所有模塊services.TryAddSingleton<IModuleLoader>(moduleLoader); // 注冊單例的模塊加載器services.AddHostedService<InitSilkyHostedService>();// 注冊 InitSilkyHostedService 后臺任務(wù)服務(wù),該服務(wù)用于初始化各個模塊的任務(wù)或是在應(yīng)用停止時釋放模塊資源services.AddSingleton<ICancellationTokenProvider>(NullCancellationTokenProvider.Instance); //注冊默認(rèn)的CancellationTokenProviderengine.ConfigureServices(services, configuration, hostEnvironment); // 通過服務(wù)引擎掃描所有IConfigureService接口的類,其實現(xiàn)類可以通過IServiceCollection對服務(wù)進(jìn)行注冊;以及通過各個模塊的ConfigureServices方法對服務(wù)進(jìn)行注冊return engine; // 返回服務(wù)引擎對象}創(chuàng)建服務(wù)引擎的對象方法如下所示,我們可以看出,服務(wù)引擎在整個應(yīng)用的生命周期是全局單例的 。
internal static IEngine Create(){return Singleton<IEngine>.Instance ?? (Singleton<IEngine>.Instance = new SilkyEngine()); // 服務(wù)引擎在應(yīng)用的整個生命周期是單例的}【Silky微服務(wù)框架之服務(wù)引擎】通過我們對上述代碼注釋可以看出,在AddSilkyServices<T>()方法中,在該方法中做了如下關(guān)鍵性的工作:
- 構(gòu)建了一個關(guān)鍵性的對象 文件服務(wù)提供者(
SilkyFileProvider) ,該對象主要用于掃描或是獲取指定的文件(例如應(yīng)用程序集等)以及提供文件夾等幫助方法;
- 使用
EngineContext創(chuàng)建了服務(wù)引擎對象SilkyEngine對象;
- 使用
IServiceCollection注冊了必要的核心的對象,如:SilkyFileProvider、ModuleLoader、NullCancellationTokenProvider等;
- 創(chuàng)建模塊加載器
ModuleLoader對象,并通過服務(wù)引擎解析、加載silky模塊,需要指出的是,在這里我們需要指定啟動模塊,系統(tǒng)會根據(jù)啟動模塊指定的依賴關(guān)系進(jìn)行排序;
- 注冊后臺任務(wù)服務(wù)
InitSilkyHostedService,該服務(wù)用于初始化各個模塊的任務(wù)或是在應(yīng)用停止時釋放模塊資源;在各個模塊的初始化工作中完成了很多核心的工作,例如:對應(yīng)用服務(wù)以及服務(wù)條目的解析、服務(wù)元數(shù)據(jù)的注冊、服務(wù)實例的注冊與更新、Rpc消息監(jiān)聽者的啟動等等;
- 在調(diào)用服務(wù)引擎的
ConfigureServices()方法時,通過服務(wù)引擎掃描所有IConfigureService接口的類,通過反射創(chuàng)建實現(xiàn)類的對象,通過經(jīng)驗總結(jié)擴展閱讀
- 微信收藏文件刪除怎么恢復(fù)(微信收藏文件不小心刪除怎么恢復(fù))
- 如何刪除微信收藏的圖片(微信已收藏的圖片如何刪除)
- 微信收藏怎么永久刪除(微信收藏怎樣永久刪除)
- 微信中我的收藏里文件和粘貼怎么刪除(微信收藏里怎么刪除所有文件)
- 微信收藏怎么一鍵刪除(微信收藏如何永久刪除)
- 微信我的收藏怎么刪除(公安局能調(diào)取已刪微信記錄嗎)
- 微信看一看收藏怎么刪除(一鍵恢復(fù)微信收藏)
- 2021微信收藏如何全部刪除(怎樣全部刪除微信收藏)
- SpringCloud整合分布式事務(wù)Seata 1.4.1 支持微服務(wù)全局異常攔截
- 受用很久很棒的微信簽名 2023成熟驚艷的簽名
