asp.net-core - 等价于配置使用 autofac 模块
问题描述
使用 Autofac 模块时Configure<TOptions>
的方法等效于什么?OptionsConfigurationServiceCollectionExtensions
我的 ConfigureServices 方法看起来像这样,但我想将其services.Configure<MyOptions>(Configuration.GetSection("MyOptions"))
移至 MyModule。
public IServiceProvider ConfigureServices(IServiceCollection services) {
services.Configure<MyOptions>(Configuration.GetSection("MyOptions"));
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(services);
containerBuilder.RegisterModule<MyModule>();
var container = containerBuilder.Build();
return new AutofacServiceProvider(container);
}
在 Module 的 Load-method 中注册是怎样的
protected override void Load(ContainerBuilder builder)
{
// configure options here
}
解决方案
我最近遇到了同样的问题,我实现了以下内容,以便您仍然可以使用 IOptions、IOptionsMonitor 和 IOptionsSnapshot,但要从 AutoFac 模块注册配置。
前提是你调用services.AddOptions()
方法ConfigureServices
:
var sfConfig = _configuration.GetSection("MyOptions");
builder.Register(ctx => new ConfigurationChangeTokenSource<MyOptions>(Options.DefaultName, sfConfig))
.As<IOptionsChangeTokenSource<MyOptions>>()
.SingleInstance();
builder.Register(ctx => new NamedConfigureFromConfigurationOptions<MyOptions>(Options.DefaultName, sfConfig, _ => { }))
.As<IConfigureOptions<MyOptions>>()
.SingleInstance();
这要求您在 ConfigureServices 方法中运行 services.AddOptions()。
在上面的示例中,“MyOptions”是配置中的部分名称,MyOptions
type 是具有保存结果的字段的 POCO 类。
推荐阅读
- docker - Docker-compose 找不到合适的文件,即使它存在
- python - 我的第一个 if 语句总是为真。未引发错误或异常
- python - Matplotlib 滑块移动垂直轴
- java - JGraphX 正在破坏 Swing 组件的界限
- php - 在 localhost 上测量数据库性能
- sql - 在日期上加入表格,但将一个表格对齐一个额外的一天
- c++ - 为什么这个程序会出现分段错误?
- java - SpringBoot + Hibernate + EHCache 2.X AbstractMethodError 异常
- excel - Excel公式从行返回最后xth数值
- android - Intellij Idea 2018.2.5 CE Android 开发问题,android sdk v28 不稳定/渲染问题