2013-03-20 2 views
0

큰 프로젝트의 시작으로 사용하려고하는 매우 기본적인 프리즘 응용 프로그램이 있습니다. "MainContent"라는 단일 영역이 정의 된 셸이 있습니다. 프로젝트에는 3 개의 모듈이 있습니다. MainMenuModule, MovieModule 및 TVModule입니다. 영화 및 TV 모듈은 MainMenuModule에 종속됩니다. 모듈은 DirectoryModuleCatalog를 사용하여로드됩니다. 이 문제는 TVModule이 포함될 때 발생합니다. 특히 TVModule의 생성자가 호출 될 때 예외가 throw됩니다. 나는 예상대로 나는 예외와 TVModule 부하를 얻을 다음에 생성자를 변경하는 경우WPF 프리즘 모듈 오류 해결 IUnityContainer

public TVModule(IUnityContainer container, IRegionManager manager) 
{ 
    _container = container; 
    _manager = manager; 
} 

: 생성자는 아래의 오류가 발생합니다.

public TVModule(IRegionManager manager) 
{ 
    _manager = manager; 
} 

유니티가 IUnityContainer를 해결하려고하면 예외가 발생합니다. 정말로 나를 괴롭히는 것은 MovieModule의 생성자가 TVModule의 컨스트럭터와 정확히 동일하지만 아무런 문제없이 작동한다는 사실입니다. 예외 세부 사항.

{"Resolution of the dependency failed, type = \"TVModule.TVModule\", name = \"(none)\". Exception occurred while: while resolving. Exception is: InvalidOperationException - The current type, Microsoft.Practices.Unity.IUnityContainer, is an interface and cannot be constructed. Are you missing a type mapping? At the time of the exception, the container was:

Resolving TVModule.TVModule,(none) Resolving parameter \"container\" of constructor TVModule.TVModule(Microsoft.Practices.Unity.IUnityContainer container, Microsoft.Practices.Prism.Regions.IRegionManager manager) Resolving Microsoft.Practices.Unity.IUnityContainer,(none) "}

{"The current type, Microsoft.Practices.Unity.IUnityContainer, is an interface and cannot be constructed. Are you missing a type mapping?"}

편집 : 내 소스의 사본 내가 모듈의 생성자에 유니티 컨테이너를 통과 제거한 Wiktor의 제안에서 here

+0

두 모듈을 모두 'UnityContainer'에 등록 하시겠습니까? 'MovieModule'과 비교했을 때'MovieModule'이 설정/등록되는 방식은 무엇이 다른가요? – ryrich

+0

MovieModule에는 TVModule에없는 추가보기가 있습니다. 내 질문에 추가 한 휴지통 링크에서 내 소스를 다운로드하십시오. – OriginalMoose

+1

이것은 대답이 아니라 좋은 조언인데, 명시 적으로 클래스간에 ioc 컨테이너를 전달하지 않아야합니다. 서비스를 지원하는 컨테이너이지만 컨테이너 자체는 비즈니스 서비스가 아닙니다. 주위에 컨테이너를 전달하면 클래스가 나쁜 컨테이너에 종속됩니다. ioc는 코드를 망칠 필요없이 도움이 될 것입니다. –

답변

0

을 보관하기 위해 업로드했습니다. 이제는 필요할 때 컨테이너에 액세스하기 위해 servicelocator를 사용합니다.

ServiceLocator.Current.GetInstance<IUnityContainer>(); 
관련 문제