如何在 .NET Core 2 中的启动.cs中"IConfiguration object is registered with DI by default"



in,aspnet core 2,当我们想在启动过程中访问配置时,我们可以借助我所知的依赖注入。

对于下面的此代码,我们如何将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中注册。"

我们如何成功?

in program.cs 有这样的代码,我们是否在 startup.cs.cs 类中设置了IConfiguration对象,并在下面使用此代码?我以为.usestartup()代码为我们执行此工作(将ICONFIGURATION对象传递给启动类)。但是如何?

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容器的助手类,您可以在此处看到。

最新更新