作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 .NET Options pattern管理我的配置。
此配置在 Controller 中是必需的(通过依赖注入(inject)很容易),而且在应用程序启动期间还需要配置其他服务。
我本以为通用 Services.Configure<MyOptionsClass>
方法将返回 MyOptionsClass 的一个实例,但不幸的是它返回一个 IServiceCollection?
有没有一种干净的方法可以在启动期间在这里访问 MyOptionsClass 的绑定(bind)实例?
var builder = WebApplication.CreateBuilder(args);
// Setup MyOptionsClass for DI
var unwantedServiceCollection = builder.Services.Configure<MyOptionsClass>(builder.Configuration.GetSection(MyOptionsClass.ConfigName));
// Already need to be able to access MyOptionsClass here:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => { options.Authority = instanceOfMyOptionsClass.Authority; });
最佳答案
我过去也有类似的需求,这就是我所做的:
var configOptions = builder.Configuration.GetSection(MyOptionsClass.ConfigName);
//You can also add data annotations to your config validate it on start
builder.Services
.AddOptions<MyOptionsClass>()
.Bind(configOptions)
.ValidateDataAnnotations()
.ValidateOnStart();
var configInstance = configOptions.Get<MyOptionsClass>();
或者,您可以使用 ServiceProviderServiceExtensions GetService<>
或 GetRequiredService<>
按类型获得您需要的服务。另外,请注意使用 BuildServiceProvider,它可能会创建重复的服务,如前所述 here .
希望这对您有所帮助。
关于c# - .NET 如何在启动期间访问 TOptions(选项模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73264647/
我正在使用 .NET Options pattern管理我的配置。 此配置在 Controller 中是必需的(通过依赖注入(inject)很容易),而且在应用程序启动期间还需要配置其他服务。 我本以
我是一名优秀的程序员,十分优秀!