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

在我的 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 对象后添加某种运行时验证,所以在这种情况下我应该更喜欢一种方法而不是另一种方法吗?)


四季花海
浏览 69回答 1
1回答

LEATH

这是在 2018 年 11 月的 Github 问题中提出的问题:AddOptions() vs. Multiple Configure(…)。这两种方法做同样的工作,但AddOptions后来出现并允许更多的定制。Configure(Action configureOptions) 和 OptionsBuilder.Configure(Action configureOptions) 最终都会做同样的事情:services.AddSingleton<IConfigureOptions<TOptions>>(&nbsp; &nbsp;&nbsp;&nbsp;new&nbsp;ConfigureNamedOptions<TOptions>(name,&nbsp;configureOptions));而OptionsBuilder.Bind(IConfiguration config)实际上会直接调用Configure(IConfiguration config),所以它们也是等价的。所以这两个 API 是可以互换的。您可以期望 services.Configure 调用继续工作。选项生成器 API 后来出现,允许使用各种实用程序方法进行更多控制。但它不能替代直接的 services.Configure API。
打开App,查看更多内容
随时随地看视频慕课网APP