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
方法获取更新的值。
我知道有两种方法可以将配置注入我的其他层 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
方法获取更新的值。