dotnet 核心中的配置绑定和 IOptions 模式有什么区别?

what is diffrence between Configuration binding and IOption Pattern in dotnet core?

我知道有两种方法可以将配置注入我的其他层 class:

第一个配置绑定:

services.AddConfiguration()  // enable Configuration Services
var config = new WeblogConfiguration();
Configuration.Bind("Weblog", config);      //  <--- This
services.AddSingleton(config);

用法:

public class PostsController : Controller
{
    PostRepository PostRepo { get; }
    WeblogConfiguration Config  { get; }
    
    public PostsController(PostRepository postRepo, 
                           WeblogConfiguration config)
    {
        PostRepo = postRepo;
        Config = config;
    }
    ...
}

IOption 模式:

services.Configure<WeblogConfiguration>(option => Configuration.GetSection("WeblogConfiguration").Bind(option));
            services.AddOptions();

用法:

public class PostsController : Controller
{
    PostRepository PostRepo { get; }
    WeblogConfiguration Config  { get; }
    
    public PostsController(PostRepository postRepo, 
                           IOptions<WeblogConfiguration> config)
    {
        PostRepo = postRepo;
        Config = config.Value;
    }
    ...
}

我想知道这些方法之间的区别以及每种方法的优缺点。

到目前为止,我只想到一个区别:

重新加载配置的可能性。

当您绑定 WeblogConfiguration 并将其添加为单例时,它将被加载一次并且永远不会改变。

使用 IOptions 模式后,您可以在添加 json 文件时使用 reloadOnChange 参数,并将通过 IOptions.Value 方法获取更新的值。