【问题标题】:How to inject IConfiguration in asp.net core 6如何在 asp.net core 6 中注入 IConfiguration
【发布时间】:2021-12-21 03:36:32
【问题描述】:

web/api 应用程序中不再有 Startup.cs。

我们曾经能够将IConfiguration 注入到Startup 类中。

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

既然那些添加服务和配置代码已移至 Program.cs,那么从那里访问配置的正确方法是什么?

【问题讨论】:

  • UseStartup 似乎仍然存在于 ASP.NET Core 6 中,虽然我还没有更新到 VS2022,所以我无法测试。
  • 如果您的问题是关于在设置期间访问配置 - 请参阅answer。此外,您不需要使用新的最小托管模型,您可以根据需要切换到通用模型。

标签: c# asp.net-core-6.0


【解决方案1】:

据我所知,他们将其替换为 ConfigurationManager 类的具体实例,它是 WebApplicationBuilder 的一个属性。

在您的 Program.cs 类中有一行代码:

 var builder = WebApplication.CreateBuilder(args);

然后您可以从此构建器实例访问配置:

 builder.Configuration.GetConnectionString("DefaultConnection");

我知道这不能回答您的“如何注入 IConfiguration”问题,但我猜您只是希望能够访问您的配置设置。没有什么可以阻止您像以前在旧的 .net 5 代码中那样设置项目。您只需要 Program.cs 即可:

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
        await host.RunAsync();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.SetMinimumLevel(LogLevel.Trace);
                });
            });
}

然后只需使用以下代码创建一个名为 Startup.cs 的类:

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

    private IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        // TODO: Service configuration code here...
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // TODO: App configuration code here...
    }
}

【讨论】:

    【解决方案2】:

    IConfiguration 可以在WebApplicationBuilder 中访问。

    所以不需要再注入IConfiguration,它现在是Program.csbuilder中的一个属性。

    var builder = WebApplication.CreateBuilder(args);
    var config = builder.Configuration;
    
    builder.Services.AddInfrastructureServices(config);
    builder.Services.AddPersistenceServices(config);
    

    【讨论】:

      【解决方案3】:

      您可以将IConfiguration 实例作为ConfigureServices 中的单例对象添加到服务集合中:

      public void ConfigureServices(IServiceCollection service)
      { 
          services.AddSingleton<IConfiguration>(Configuration);  
          //...
      }
      

      这允许您在任何控制器或类中注入IConfiguration

      public class UserController
      {
        public UserController(IConfiguration configuration)   
        //Use IConfiguration instance here
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-04
        相关资源
        最近更新 更多