从Startup类访问Configuration对象
我想从我的ASP.NET vNext项目中的许多控制器中访问我公司的Active Directory,并将域名插入到我的config.json文件中,因此我可以从Configuration类访问它。 我发现每次想要访问我的config.json时总是实例化一个新的Configuration对象很重,有没有办法通过IConfiguration
API来访问初始化为Startup类的Configuration类?
如何执行此操作的示例:
我们假设您有一个如下所示的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(optionsSetup => { //get from config.json file optionsSetup.DomainName = configuration.Get("ActiveDirectory:DomainName"); });
在所有想要获得此配置设置的控制器中,执行类似的操作……此处选项由DI系统注入:
public class HomeController : Controller { private readonly IOptions _activeDirectoryOptions; public HomeController(IOptions activeDirectoryOptions) { _activeDirectoryOptions = activeDirectoryOptions; } public IActionResult Index() { string domainName = _activeDirectoryOptions.Options.DomainName; ........ } }
回应评论:
我能想到几个选项:
-
从行动中,你可以做到
var options = HttpContext.RequestServices.GetRequiredService
>().Options; -
您可以为使用
FromServicesAttribute
修饰的操作设置参数。 该属性将导致从DI检索参数值。 例:public IActionResult Index([FromServices] IOptions
options)
我更喜欢#2而非#1,因为在unit testing的情况下,它会为您提供所有相关部件的信息。
- ASP.NET Core中的services.AddTransient,service.AddScoped和service.AddSingleton方法有什么区别?
- ASPNET核心服务器发送事件/响应刷新
- Asp网核rc2。 抽象类模型绑定
- 基于Http Header值的ASP.NET MVC5 / 6路由
- ServiceFilter和TypeFilter – 注入这些filter有什么区别?
- 无法使用Asp.NET Core中的Entity Framework添加带有视图的Scaffold> MVC Controller
- 在dotnetcore中重新加载运行时的路由
- 在mvc中使用IViewLocationExpander
- 无法在web api控制器中遇到断点