ASP.NET Core DI概述

衆所周知,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))
            {
                //..
            }
        }
    }
相關文章
相關標籤/搜索