2011-10-20 2 views
20

MVC 컨트롤러에서 명명 된 매개 변수를 사용하여 종속성을 해결하고 싶습니다. 나는 Autofac 컨테이너에 액세스 할 수 있으면 나는 그렇게처럼 할 수 있어야 :ASP.NET MVC3 컨트롤러에서 autofac 컨테이너에 액세스하려면 어떻게합니까?

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

나는 AutoFac 컨테이너에 액세스하는 방법을 찾을 수 없습니다. 사용할 수있는 컨테이너에 대한 전역 참조가 있습니까? 아니면 명명 된 매개 변수를 사용하는 다른 방법이 있습니까?

답변

30

나는 IComponentContext를 동일한 용도로 사용할 수 있다는 것을 발견했다. IComponentContext의 인스턴스를 컨트롤러에 삽입 할 수 있습니다. Autofac in web applications, where should I store the container for easy access?

나는 또한 전 세계적으로 여기 종속성 해결에 접근 얻는 방법을 발견했습니다 : Global access to autofac dependency resolver in ASP.NET MVC3?

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") 
     ); 
    } 
} 

는이 질문에 컨테이너에 글로벌 액세스를 얻기에 좋은 조언을 발견했습니다

+2

당신은 그렇게해서는 안됩니다. 나쁜 습관입니다. 서비스 위치 지정자 접근 방식 대신 생성자 주입을하는 것이 좋습니다. 간단히 생성자에 IService를 주입하고 주입 된 instace를 클래스 fiel로 사용하십시오 – Wojteq

+1

명명 된 매개 변수는 어떻게 사용합니까? –

+2

Factory delegate를 사용하여 비슷한 것을 얻을 수 있습니다. http://code.google.com/p/autofac/wiki/DelegateFactories – Wojteq

12
AutofacDependencyResolver.Current.ApplicationContainer 

.Resolve 

.ResolveNamed 

.ResolveKeyed 

..... 
+14

응답을 조금 더 살피 실 수 있습니다. 몇 가지 이름을 게시하는 것은 대부분의 사람들에게 도움이되지 않습니다. –

+4

나는 그의 대답이 실제로 도움이된다고 생각한다. 이 문제로 해결 된 문제가 있습니다. –

관련 문제