zoukankan      html  css  js  c++  java
  • ASP.NET Core DI概述

    众所周知,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))
                {
                    //..
                }
            }
        }
  • 相关阅读:
    Antlr与Regex
    c_str()
    C++ 友元
    C++ 操作符重载
    Remote 'attachhome' failed on nodes:XXX
    RAC安装GI时运行root.sh脚本结果
    clscfg.bin: error while loading shared libraries: libcap.so.1:
    RAC安装重新运行root.sh
    libXext.so.6 libXp.so.6 libXt.so.6 is needed by openmotif21-2.1.30-11.el7.i686
    向数据库中导入AWR数据
  • 原文地址:https://www.cnblogs.com/etoumao/p/12747545.html
Copyright © 2011-2022 走看看