在program.cs中使用选项模式

问题描述 投票:0回答:3

我在应用程序内部使用选项模式,从 appsettings.json 文件中读取属性,并在整个应用程序的类中使用它们。

但是,我有一个情况,我需要在我的program.cs 文件本身内部使用这些属性。这是不起作用的代码,因为我无法在 program.cs 文件中注入配置实例。代码显示了我想要发生的事情......有没有更好的方法来做到这一点并且仍然保持在选项模式内?

builder.Services.Configure<SwaggerConfig>(builder.Configuration.GetSection("Swagger"));

var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI(s =>
{
   s.SwaggerEndpoint( SwaggerConfig.Url ,
       SwaggerConfig.Name);
    s.RoutePrefix = SwaggerConfig.RoutePrefix;
});
c# .net-core swagger .net-6.0
3个回答
2
投票

您可以访问代码中的

IServiceProvider
。您可以通过
app.Services.GetRequiredService<IOptions<SwaggerConfig>>().Value
获取您正在寻找的配置。

问题是,一旦你调用

builder.Build()
,DI 容器也将被构建。


1
投票

您可以获取该部分并将其映射到设置类,如下所示:

var swaggerConfig = builder.Configuration.GetSection("Swagger")
    .Get<SwaggerConfig>();

var app = builder.Build();
app.UseSwagger();
app.UseSwaggerUI(s =>
{
   s.SwaggerEndpoint( swaggerConfig.Url,
       swaggerConfig.Name);
    s.RoutePrefix = swaggerConfig.RoutePrefix;
});

0
投票

我已经用这个很久了

  public static class AppHelpers
  {
    public static T RegisterOptions<T>(IServiceCollection services, IConfiguration configuration) where T : class
    {
      var sectionName = typeof(T).Name;
      var section = configuration.GetSection(sectionName);
      var options = section.Get<T>();
      services.Configure<T>(section);
      return options;
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.