簡體   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