ASP.NET Core:为什么使用 IOptions 适配器?

Alo*_*ois 5 c# dependency-injection asp.net-core

我在配置文件中有一个自定义选项块(MyOptions),appsettings.json如下所示:

{
    "ConnectionStrings": {
        "test": "..."
    },
    "MyOptions": {
        "Prop1": "Value1",
        "Prop2": "Value2"
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 POCO 看起来像这样:

public class MyOptions
{
    public string Prop1 { get; set; }
    public string Prop2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在 中Startup,我注册它,如下所示:

public void ConfigureServices(IServiceCollection services)
{
   var configSection = Configuration.GetSection("MyOptions");
   services.Configure<MyOptions>(configSection);
}
Run Code Online (Sandbox Code Playgroud)

我的控制器通过使用适配器“IOptions”来请求它:

public IndexController(IOptions<MyOptions> options)
{
    // ...
} 
Run Code Online (Sandbox Code Playgroud)

这是我的问题:为什么我必须使用适配器IOptions?官方文档说这IOptions是一个单例。IOptions使用像这样注册Options为服务有什么好处吗?

public IndexController(IOptions<MyOptions> options)
{
    // ...
} 
Run Code Online (Sandbox Code Playgroud)