我正在构建一个 .net 最小 api,其中包含通过 appsettings.json 定义的许多设置。
但是如何在program.cs中使用此设置类而不让编译器生成警告:
ASP0000 从应用程序代码结果中调用“BuildServiceProvider” 在正在创建的单例服务的附加副本中。考虑 替代方案,例如将依赖注入服务作为参数 “配置”。
我所做的是:
var builder = WebApplication.CreateBuilder(args); // Create a WebApplication builder
builder.Services.AddEndpointsApiExplorer();
builder.Services.Configure<MYSettingFromAppsettings>(
builder.Configuration.GetSection(MYSettingFromAppsettings.Position));
builder.Services.AddSingleton(resolver =>
resolver.GetRequiredService<IOptions<MYSettingFromAppsettings>>().Value);
...//same for all the other settings
var corsConfig = builder.Services.BuildServiceProvider().GetRequiredService<MYSettingFromAppsettings>();
// use settings
需要明确的是,我不仅使用program.cs中的设置,我还通过服务中的DI使用它(IOptions选项)
那么,在 program.cs 中以及通过 DI 使用类型保存设置类的最佳实践是什么?
以下:
var corsConfig = builder.Services.BuildServiceProvider().GetRequiredService<MYSettingFromAppsettings>();
构建应该避免的服务提供商。
如果您需要在构建容器之前绑定配置,您可以执行以下操作:
var cfg = config.GetSection(MYSettingFromAppsettings.Position)
.Get<MYSettingFromAppsettings>();