我的配置设置如下:
public void ConfigureServices(IServiceCollection services)
{
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
services.Configure<AppSettings>(configuration);
}
public class AppSettings
{
public ChildSettings Child { get; set; }
public string Property { get; set; }
}
public class ChildSettings
{
public string ChildProperty { get; set; }
}
我的appSettings.json看起来像这样:
{
"Child": {
"ChildProperty": "Value"
}
"Property": "Value"
}
我可以很好地将IOptions<AppSettings>
注入到我的控制器中:
public class MyController : Controller
{
public MyController(IOptions<AppSettings> options)
{
ChildSettings appSettings = options.Value;
}
}
它有点老了,必须向下走几级才能找到你想要的设置对象。有没有一种方法可以像这样使用IOptions<ChildSettings>
:
public class MyController : Controller
{
public MyController(IOptions<ChildSettings> options)
{
ChildSettings appSettings = options.Value;
}
}
3条答案
按热度按时间wqlqzqxt1#
如果您想直接使用ChildSettings而不通过AppSettings对象,则必须将ChildSettings注册为DI配置中的单独条目,如下所示:
services.Configure<ChildSettings>(_configuration.GetSection("AppSettings:ChildSettings"));
但是如果你想这样做,也许你可以只在appsettings.json文件的根目录下设置ChildSettings,你不需要把你的设置放在一个名为AppSettings的部分。
de90aj5v2#
配置所有options automatically
cl25kdpy3#
可以通过实现自定义IOptionsFactory〈〉来实现。
可复制粘贴代码:
用法:
services.AddRecursiveOptions<AppSettings>(Configuration);