Как получить доступ к контейнеру autofac в контроллере ASP.NET MVC3? - PullRequest
22 голосов
/ 20 октября 2011

Я хотел бы разрешить зависимость, используя именованный параметр в контроллере MVC. Если я смогу получить доступ к контейнеру Autofac, я смогу сделать это так:

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

Я не могу узнать, как получить доступ к контейнеру AutoFac. Есть ли глобальная ссылка на контейнер, который я могу использовать, или есть другой способ использовать именованные параметры?

Ответы [ 2 ]

31 голосов
/ 20 октября 2011

Я только что обнаружил, что могу использовать 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 в веб-приложениях, где я должен хранитьконтейнер для легкого доступа?

Я также нашел, как получить глобальный доступ к распознавателю зависимостей здесь: Глобальный доступ к автоопределению распознавателя зависимостей в ASP.NET MVC3?

12 голосов
/ 01 ноября 2011
AutofacDependencyResolver.Current.ApplicationContainer

.Resolve

.ResolveNamed

.ResolveKeyed

.....
...