所以实际上有两种方法可以解决这个问题。
选项 1:选项类
你有一个 appsettings.json 文件:
{
"myConfiguration": {
"myProperty": true
}
}
你像这样创建一个配置 POCO:
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
在您的 startup.cs 中,您的 ConfigureServices 中有一些东西可以注册配置:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
然后在您的控制器/服务中注入 IOptions 并且它是可用的。
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
就我个人而言,我不喜欢使用 IOptions,因为我认为它会带来一些我并不真正想要的额外垃圾,但你可以做一些很酷的事情,比如热交换和其他东西。
选项 2:配置 POCO
这几乎是相同的,但在您的配置服务方法中,您改为绑定到 POCO 的单例。
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
然后你就可以直接注入 POCO 了:
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
有点简单,因为您可能应该使用接口来简化单元测试,但您明白了。
大部分取自这里:http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/