【发布时间】:2017-05-04 13:24:29
【问题描述】:
我希望 ASP.Net Core IoC 容器根据当前显示的视图提供接口的实现。我认为我应该能够通过提供工厂方法在运行时做到这一点。在Startup.cs我添加了以下注册:
services.AddTransient<IMyInterface>(serviceProvider =>
{
var context = serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
//Need to switch on current view somehow?
switch(context.??????){
case ???:
return new MyImplementationOne();
case ???:
return new MyImplementationTwo():
}
}
如何使用HttpContext 根据当前显示的视图进行切换?或者,我应该使用serviceProvider 提供的其他服务吗?
【问题讨论】:
-
您是否尝试过使用请求 URL?在执行控制器操作并返回视图结果之前,我们无法知道将显示哪个视图。到那时,所有的依赖关系都必须已经解决了。
-
@juunas 我是新手:如何获取请求 URL?
context.Request上似乎没有URL属性? -
有一个
Path属性。 -
您可以使用
IActionContextAccessor接收一个包含正在执行的控制器和动作的ActionContext实例。 -
不幸的是
Path属性只返回"\"????
标签: c# dependency-injection asp.net-core