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))
            {
                //..
            }
        }
    }