2012-02-06 2 views
1

은 MSDN에 의한 튜토리얼 (source)에서 IDependencyResolver을 리팩토링 방법 :이 릴리스 방법이 없기 때문에IDependencyResolver 사용하는 것이 좋습니다 MSDN 튜토리얼

IDependencyResolver resolver = DependencyResolver.Current; 
IDependencyResolver newResolver = new UnityDependencyResolver(container, resolver); 
DependencyResolver.SetResolver(newResolver); 

내가 IDependencyResolver 제대로 개체 수명을 관리하지 않는 인상이었다을 , 또한 개념적으로 서비스 로케이터 방지 패턴 (source)입니다.

this tutorial을 어떻게 리팩터링하여 IDependencyResolver를 사용할 수 있습니까?

+0

튜토리얼을 리팩터링해야하는 이유는 무엇입니까? 튜토리얼을 학습 목적으로 사용하거나 프로덕션 코드에서 사용하기 위해 적용하고 있습니까? –

+0

@PaulKeister - 둘 다 약간, 대개 Unity 컨테이너를 올바르게 설정하는 방법을 알아 내려고합니다. –

답변

2

Unity.Mvc3을 사용하면 IDispoable을 구현하는 객체의 수명을 관리 할 수있는 HierarchicalLifetimeManager가 있습니다.

기본적으로 MVC를 사용하는 컨트롤러의 생성자 주입을 통해 컴포지션 루트에서만 해결하면 그 패턴이 반대가 아닙니다. 이없는

http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx

참고 사용자가 만든 사용자 정의 컨트롤러 공장으로, 단결 당신을 위해 자동으로 삽입됩니다. 내 코드를 여기에서보십시오 : http://completedevelopment.blogspot.com/2011/12/using-dependency-injection-with-mvc.html

+0

컴퍼 지션 루트에서만 등록을 수행해야한다고 생각하고 필요한 경우 해결/해제해야합니다. 네가 결단을 말했을 때, 너는 등록을 의미 했는가, 또는 나는 무언가를 놓치고 있는가? 한 곳에서 모든 종속성을 해결 한 다음 다른 곳에서 참조하는 것은 서비스 위치 지정자 패턴의 정의라는 것이 내 인상이었습니다. –

+0

해결은 등록이 아니라 구성 루트에서 수행됩니다. 앱 시작시 완료됩니다. 응용 프로그램의 어느 부분에서라도 가능한 한 요청의 진입 점에 가까울 때 (제어 권한이있는 경우) 서비스 로케이터가 패턴을 벗어납니다. 요점은 MVC 컨트롤러의 경우 바인더 주입이나 다른 주입 (mvc 컨트롤러, 모델 바인더, 유효성 검사기 등에서 해결할 수있는 여러 종류가 있습니다. –

+0

btw 위의 업데이트를 참조하십시오. –

관련 문제