繁体   English   中英

.NET Core 2中Startup.cs中的“默认情况下如何向DI注册IConfiguration对象”

[英]How can “IConfiguration object is registered with DI by default” in Startup.cs in .NET Core 2

在aspnet core 2中,当我们想在启动过程中访问配置时,据我所知,由于依赖注入,我们可以做到这一点。

对于下面的代码,我们如何利用Dependency Injection的优点将IConfiguration对象传递给此类;

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

我看到一个句子:

“默认情况下,IConfiguration对象已向DI注册。”

我们怎样才能成功呢?

program.cs中有这样的代码,我们是否使用以下代码在startup.cs类中设置IConfiguration对象? 我认为.UseStartup()代码为我们完成了这项工作(将IConfiguration对象传递给Startup类)。 但是如何?

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(SetupConfiguration)
          .UseStartup<Startup>();

    private static void SetupConfiguration(WebHostBuilderContext ctx, IConfigurationBuilder builder)
    {
        //Remove the default configuration options
        builder.Sources.Clear();

        builder.AddJsonFile("config.json", false, true).
            AddEnvironmentVariables();
    }
}

如果有人可以详细解释这一点,我将非常高兴。

IConfiguration实例在内部为您处理依赖项注入。 如果浏览源代码,则很容易找到技术细节。 在这种情况下,有一个模拟基本DI容器的帮助程序类,您可以在此处看到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM