C# “怎么可能?”;默认情况下,IConfiguration对象在DI中注册;在.NET Core 2中的Startup.cs中

C# “怎么可能?”;默认情况下,IConfiguration对象在DI中注册;在.NET Core 2中的Startup.cs中,c#,dependency-injection,configuration,asp.net-core-2.0,C#,Dependency Injection,Configuration,Asp.net Core 2.0,在AspnetCore2中,当我们想在启动期间访问配置时,据我所知,我们可以通过依赖注入来实现 对于下面的代码,我们如何通过依赖注入将IConfiguration对象传递给这个类 public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configurat

在AspnetCore2中,当我们想在启动期间访问配置时,据我所知,我们可以通过依赖注入来实现

对于下面的代码,我们如何通过依赖注入将
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
对象?我想 代码为我们执行此作业(将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();
    }
}
公共类程序
{
公共静态void Main(字符串[]args)
{
CreateWebHostBuilder(args.Build().Run();
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(设置配置)
.UseStartup();
专用静态无效设置配置(WebHostBuilderContext ctx、IConfigurationBuilder)
{
//删除默认配置选项
builder.Sources.Clear();
AddJsonFile(“config.json”,false,true)。
AddEnvironmentVariables();
}
}

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

依赖项注入是为
IConfiguration
实例内部处理的。如果您浏览网站,很容易找到技术细节。在本例中,有一个helper类模仿基本DI容器,您可以看到这一点。

Reference谢谢您,但我阅读了此文档,无法澄清我提出的问题。我想知道如何在Startup类中初始化IConfiguration obejct。你说的“但是如何”是什么意思?如果你很好奇,请阅读源代码。大提示:您可以在webhost builder上调用
.Build()
。您认为它有什么作用?谢谢,但我看不到“publicstaticiWebHostBuilderUseStartup(这个iWebHostBuilderHostBuilder)where TStartup:class”方法定义。无论如何,您提到过这个方法初始化我的Tstartup类(在示例中命名为Startup)?若你们能看到这个方法和post的定义,我会很高兴这个方法最终会委托给psuedo DI发挥作用的地方。创建
Startup
类,该类调用依次使用我最初提到的
IServiceCollection
对象。谢谢,它变得更清晰了。您确信我编写的具有泛型声明的方法最终会调用您链接的方法,如果是真的,我理解。