我在应用程序内部使用选项模式,从 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;
});
您可以访问代码中的
IServiceProvider
。您可以通过 app.Services.GetRequiredService<IOptions<SwaggerConfig>>().Value
获取您正在寻找的配置。
问题是,一旦你调用
builder.Build()
,DI 容器也将被构建。
您可以获取该部分并将其映射到设置类,如下所示:
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;
});
我已经用这个很久了
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;
}
}