C# “怎么可能?”;默认情况下,IConfiguration对象在DI中注册;在.NET Core 2中的Startup.cs中
在AspnetCore2中,当我们想在启动期间访问配置时,据我所知,我们可以通过依赖注入来实现 对于下面的代码,我们如何通过依赖注入将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
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
对象。谢谢,它变得更清晰了。您确信我编写的具有泛型声明的方法最终会调用您链接的方法,如果是真的,我理解。