眾所周知,ASP.NET Core有一個DI框架,應用程式啟動時初始化。 預定義依賴 1: IApplicationBuilder:提供了配置應用程式的請求管道機制 2:ILoggerFactory:次類型提供了創建記錄器組件的模式 3:LHostinEnvironment:此類型提供管理應用程式運 ...
眾所周知,ASP.NET Core有一個DI框架,應用程式啟動時初始化。
預定義依賴
1: IApplicationBuilder:提供了配置應用程式的請求管道機制
2:ILoggerFactory:次類型提供了創建記錄器組件的模式
3:LHostinEnvironment:此類型提供管理應用程式運行的Web宿主環境的信息。
註冊自定義依賴
為了註冊類型,需要讓系統知道如何將一個抽象類型解析為一個具體類型,這種映射可以是靜態設定,也可以是動態的。
public void ConfigureServices(IServiceCollection services) { services.AddTransient<ICustomerService, CustomerService>(); }
每當請求一個實現了ICustomerService的類型的實例時,系統返回CustomerService的一個實例,特別是,AddTransient方法確保了每次都會返回CustomerSerivce類型的一個新實例。
靜態解析有時候有一定的局限性。事實上,如果需要根據運行時條件將類型T解析為不同的類型,它允許指定一個回調函數來解析依賴
public void ConfigureServices(IServiceCollection services) { services.AddTransient<ICustomerService>(provider=> { var context = provider.GetRequiredService<IHttpContextAccessor>(); if (SomeRuntimeConditionHolds(context.HttpContext.User)) return new CustomerServiceMatchingRuntionCondition(); else return new DefaultCustomerService(); }); }
收集配置數據
我們都知道之前的配置都是用web.config文件類獲取配置,那麼在Core中他們提供了一個更加豐富,複雜的基礎結構。
它配置是基於 名稱-值 對列表。1:Json數據提供程式,2:環境變數提供程式,3:記憶體提供程式。4:自定義配置提供程式。
關於自定義配置,我們需要實現一個IConfigurationSource介面的類,但是,在實現的時候,還需要引用一個集成自ConfigurationProvider的自定義類
public class MyDatabaseConfigSoure : IConfigurationSource { public IConfigurationProvider Build(IConfigurationBuilder builder) { throw new MyDatabaseConfigProvider(); } } public class MyDatabaseConfigProvider : ConfigurationProvider { private const string ConnectionString = ""; public override void Load() { using (var db = new MyDatabaseContext(ConnectionString)) { //.. } } }