appsettings.json 有以下配置部分:
{
"MySettings1": {
"Name": "My Name",
"Age": "25",
}
}
加载到强类型对象中MySettings
:
public class MySettings
{
public string Name { get; set; }
public int Age { get; set; }
}
Startup.ConfigureServices()
方法中这样做:
services.Configure<MySettings>(configuration.GetSection("MySettings1"));
或者这样:
services.AddOptions<MySettings>().Bind(configuration.GetSection("MySettings1"));
两种情况下都能正常获取的IOptions<MySettings>注入到
Controller
。
其实,这两种情况,Configure(Action configureOptions) 和 OptionsBuilder.Configure(Action configureOptions) 最终都会做同样的事情:
services.AddSingleton<IConfigureOptions<TOptions>>(
new ConfigureNamedOptions<TOptions>(name, configureOptions));
OptionsBuilder.Bind(IConfiguration config) 实际上会直接调用 Configure(IConfiguration config),所以它们也是等价的,所以这两个 API 是可以互换的,AddOptions
后来出现并允许更多的自定义项。