衆所周知,ASP.NET Core有一個DI框架,應用程序啓動時初始化。web
預約義依賴框架
1: IApplicationBuilder:提供了配置應用程序的請求管道機制ide
2:ILoggerFactory:次類型提供了建立記錄器組件的模式函數
3:LHostinEnvironment:此類型提供管理應用程序運行的Web宿主環境的信息。ui
註冊自定義依賴spa
爲了註冊類型,須要讓系統知道如何將一個抽象類型解析爲一個具體類型,這種映射能夠是靜態設定,也能夠是動態的。code
public void ConfigureServices(IServiceCollection services) { services.AddTransient<ICustomerService, CustomerService>(); }
每當請求一個實現了ICustomerService的類型的實例時,系統返回CustomerService的一個實例,特別是,AddTransient方法確保了每次都會返回CustomerSerivce類型的一個新實例。blog
靜態解析有時候有必定的侷限性。事實上,若是須要根據運行時條件將類型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)) { //.. } } }