我想在MVC控制器中使用命名参数来解决依赖关系。如果我可以访问Autofac容器,我应该能够这样做:
var service = Container.Resolve<IService>(
new NamedParameter("fileExtension", dupExt)
);
我无法找到如何访问AutoFac容器。是否有我可以使用的容器的全局引用,还是有另一种方法来使用命名参数?
答案 0 :(得分:31)
我刚刚发现我可以使用IComponentContext来做同样的事情。您可以将IComponentContext的实例注入控制器。
public class MyController : Controller
{
private readonly IComponentContext _icoContext;
public void MyController(IComponentContext icoContext)
{
_icoContext= icoContext;
}
public ActionResult Index()
{
var service = _icoContext.Resolve<IService>(
new NamedParameter("ext", "txt")
);
}
}
我在这个问题上找到了一些关于获取全局访问容器的好建议: Autofac in web applications, where should I store the container for easy access?
我还在这里找到了如何全局访问依赖项解析器:Global access to autofac dependency resolver in ASP.NET MVC3?
答案 1 :(得分:12)
AutofacDependencyResolver.Current.ApplicationContainer
.Resolve
.ResolveNamed
.ResolveKeyed
.....