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

Ric*_*ide 22 autofac asp.net-mvc-3

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

var service = Container.Resolve<IService>(
    new NamedParameter("fileExtension", dupExt)
);
Run Code Online (Sandbox Code Playgroud)

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

Ric*_*ide 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")
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经找到了一些关于在这个问题中获取容器全局访问权的一些好建议: Web应用程序中的Autofac,我应该在哪里存储容器以便于访问?

我还发现了如何全局访问依赖解析器:ASP.NET MVC3中对autofac依赖解析器的全局访问?

  • 你不应该这样做.这是一个不好的做法.而不是服务定位器方法,最好做构造函数注入.只需将IService注入构造函数并将注入的instace用作类fiel (3认同)
  • 您可以使用Factory委托获得类似的内容:http://code.google.com/p/autofac/wiki/DelegateFactories (2认同)

che*_*enZ 11

AutofacDependencyResolver.Current.ApplicationContainer

.Resolve

.ResolveNamed

.ResolveKeyed

.....
Run Code Online (Sandbox Code Playgroud)

  • 你可能想要充实你的反应.只发布几个名字对大多数人来说没那么有用. (15认同)
  • 我认为他的回答实际上是有帮助的.我用这个答案解决了我的问题. (4认同)