在我的 ASP.NET Core 2.2 WebApi 项目中,我想将配置加载appsettings.json到强类型对象中。
appsettings.json 有以下配置部分:
{
"MySettings1": {
"Name": "John Smith",
"Age": "25",
}
}
Run Code Online (Sandbox Code Playgroud)
我想加载到强类型对象中MySettings:
public class MySettings
{
public string Name { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我可以在我的Startup.ConfigureServices()方法中这样做:
services.Configure<MySettings>(configuration.GetSection("MySettings1"));
Run Code Online (Sandbox Code Playgroud)
或者像这样:
services.AddOptions<MySettings>().Bind(configuration.GetSection("MySettings1"));
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?它们都工作正常,因为我能够在这两种情况下获得适当的IOptions<MySettings>注入实例HomeController。
在某些特定情况下,我应该使用一种方法而不是另一种方法吗?(例如,将来我可能希望在从配置填充 MySettings 对象后添加某种运行时验证,所以在这种情况下,我应该更喜欢一种方法吗?)
Pan*_*vos 24
这是在 2018 年 11 月的 Github 问题中提出的问题: AddOptions() 与 Multiple Configure(...)。这两种方法都做同样的工作,但AddOptions后来出现并允许更多的自定义。
Configure(Action configureOptions) 和 OptionsBuilder.Configure(Action configureOptions) 最终都会做同样的事情:
services.AddSingleton<IConfigureOptions<TOptions>>(
new ConfigureNamedOptions<TOptions>(name, configureOptions));
Run Code Online (Sandbox Code Playgroud)
而 OptionsBuilder.Bind(IConfiguration config) 实际上会直接调用 Configure(IConfiguration config),所以它们也是等价的。
所以这两个 API 是可以互换的。您可以期待 services.Configure 调用继续工作。选项构建器 API 稍后出现,以允许对各种实用程序方法进行更多控制。但它不能替代直接 services.Configure API。
我不确定何时添加此功能,但使用AddOptions数据注释公开了设置类的验证。
特别有价值的是ValidateOnStart在启动期间执行验证的方法,以便可以立即捕获问题。如果不使用它,那么您可能会在运行时遇到配置错误的问题。
| 归档时间: |
|
| 查看次数: |
12728 次 |
| 最近记录: |