我想从我的ASP.NET vNext项目中的许多控制器中访问我公司的Active Directory,并将域名插入到我的config.json文件中,因此我可以从Configuration类访问它。我发现每次想要访问我的config.json时总是实例化一个新的Configuration对象很重,有没有办法通过IConfiguration
API来访问初始化为Startup类的Configuration类?
答案 0 :(得分:10)
如何执行此操作的示例:
我们假设您有一个如下所示的config.json:
{
"SomeSetting1": "some value here",
"SomeSetting2": "some value here",
"SomeSetting3": "some value here",
"ActiveDirectory": {
"DomainName": "DOMAIN-NAME-HERE"
}
}
创建一个包含选项信息的POCO类型:
public class ActiveDirectoryOptions
{
public string DomainName { get; set; }
}
在Startup.cs中,配置服务时:
services.Configure<ActiveDirectoryOptions>(optionsSetup =>
{
//get from config.json file
optionsSetup.DomainName = configuration.Get("ActiveDirectory:DomainName");
});
在所有想要获得此配置设置的控制器中,执行以下操作...此处选项由DI系统注入:
public class HomeController : Controller
{
private readonly IOptions<ActiveDirectoryOptions> _activeDirectoryOptions;
public HomeController(IOptions<ActiveDirectoryOptions> activeDirectoryOptions)
{
_activeDirectoryOptions = activeDirectoryOptions;
}
public IActionResult Index()
{
string domainName = _activeDirectoryOptions.Options.DomainName;
........
}
}
回复评论:
我能想到几个选项:
从动作中,你可以做到
var options = HttpContext.RequestServices.GetRequiredService<IOptions<ActiveDirectoryOptions>>().Options;
您可以为使用FromServicesAttribute
修饰的操作设置参数。该属性将导致从DI检索参数值。
例如:
public IActionResult Index([FromServices] IOptions<ActiveDirectoryOptions> options)
我更喜欢#2而不是#1,因为在单元测试的情况下,它会为您提供所有相关部分的信息。