如何在ASP.NET MVC3控制器中访问autofac容器?

时间:2011-10-20 15:07:42

标签: asp.net-mvc-3 autofac

我想在MVC控制器中使用命名参数来解决依赖关系。如果我可以访问Autofac容器,我应该能够这样做:

var service = Container.Resolve<IService>(
    new NamedParameter("fileExtension", dupExt)
);

我无法找到如何访问AutoFac容器。是否有我可以使用的容器的全局引用,还是有另一种方法来使用命名参数?

2 个答案:

答案 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

.....