Asp.net-Core
等效於使用 autofac 模組的 Configure<T>
使用 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 }
我個人對 Autofac 並不熟悉,但一般來說,
Configure<T>所做的只是 1)將特定的配置部分綁定到一個類,然後 2)將該類註冊到服務集合中,這樣就可以直接注入了。因此,您可以改為使用以下內容來綁定您的強類型配置:
var config = config.GetSection("MyOptions").Get<MyOptions>();然後,您只需使用 Autofac 將其註冊為單例範圍內的常量。
我最近遇到了同樣的問題,我實現了以下內容,以便您仍然可以使用 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”是配置中的部分名稱,
MyOptionstype 是具有保存結果的欄位的 POCO 類。