.NET如何在启动期间访问TOptions(选项模式)
在.NET启动期间获取已绑定的Options实例的简洁方法
你可以直接通过配置绑定获取实例,再同步完成DI容器注册,具体有两种简洁方式:
方法一:使用Bind方法
先手动创建Options实例,将配置节绑定到该实例,同时完成DI注册:
var builder = WebApplication.CreateBuilder(args); // 手动绑定配置到实例 var myOptions = new MyOptionsClass(); builder.Configuration.GetSection(MyOptionsClass.ConfigName).Bind(myOptions); // 注册到DI容器(保证控制器能通过依赖注入获取) builder.Services.Configure<MyOptionsClass>(builder.Configuration.GetSection(MyOptionsClass.ConfigName)); // 直接用myOptions实例配置认证服务 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = myOptions.Authority; });
方法二:使用Get<T>方法(更简洁)
利用ConfigurationBinder.Get<T>直接从配置节拿到绑定好的实例:
var builder = WebApplication.CreateBuilder(args); // 直接获取绑定后的Options实例 var myOptions = builder.Configuration.GetSection(MyOptionsClass.ConfigName).Get<MyOptionsClass>()!; // 注册到DI容器 builder.Services.Configure<MyOptionsClass>(builder.Configuration.GetSection(MyOptionsClass.ConfigName)); // 使用实例配置服务 builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.Authority = myOptions.Authority; });
补充说明
Services.Configure<T>返回IServiceCollection是为了支持服务注册的链式调用,本身不负责返回绑定后的Options实例。上面两种方法既满足了DI注册需求,又能在启动阶段拿到可用的实例。
内容的提问来源于stack exchange,提问作者Moffen
相关产品推荐
相关产品推荐

