为了账号安全,请及时绑定邮箱和手机立即绑定

在 ASP.NET Core 中加载配置时,services.Configure()

在 ASP.NET Core 中加载配置时,services.Configure()

C#
四季花海 2022-12-24 09:50:05
在我的 ASP.NET Core 2.2 WebApi 项目中,我想将配置从中加载appsettings.json到强类型对象中。appsettings.json 具有以下配置部分:{  "MySettings1": {    "Name": "John Smith",    "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>注入实例HomeController。在某些特定情况下,我应该使用其中一种方法而不是另一种方法吗?(例如,将来我可能希望在从配置中填充 MySettings 对象后添加某种运行时验证,所以在这种情况下我应该更喜欢一种方法而不是另一种方法吗?)
查看完整描述

1 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

这是在 2018 年 11 月的 Github 问题中提出的问题:AddOptions() vs. Multiple Configure(…)。这两种方法做同样的工作,但AddOptions后来出现并允许更多的定制。

Configure(Action configureOptions) 和 OptionsBuilder.Configure(Action configureOptions) 最终都会做同样的事情:

services.AddSingleton<IConfigureOptions<TOptions>>( 
   new ConfigureNamedOptions<TOptions>(name, configureOptions));

而OptionsBuilder.Bind(IConfiguration config)实际上会直接调用Configure(IConfiguration config),所以它们也是等价的。

所以这两个 API 是可以互换的。您可以期望 services.Configure 调用继续工作。选项生成器 API 后来出现,允许使用各种实用程序方法进行更多控制。但它不能替代直接的 services.Configure API。


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信