2011-03-28 9 views
3

필자는 셸의 MainRegion (탭 컨트롤)에 새보기를 추가하려는 명령이 포함 된보기 모델이 있습니다.보기 모델에서 Mef 컨테이너를 사용하여보기를 해결하는 방법

나는 발견보다보기 주입을 사용해야 할 것으로 보입니다. 프리즘 문서

IRegionManager regionManager = ...; 
IRegion mainRegion = regionManager.Regions["MainRegion"]; 
NewView view = this.container.Resolve<NewView>(); 
mainRegion.Add(view); 

어떻게 내가 NewView를 해결하기 위해 내보기 모델의 CompositionContainer에 대한 참조를받을 수 있나요에서

즉?

감사합니다.

답변

-1

question은 귀하의 것과 실질적으로 동일합니다.

+1

감사합니다. 당신이 보여주는 예제가 단일성 컨테이너를 사용하고있는 것을 볼 수 있습니다. 나는 MEF를 사용하고있다. 내 컨테이너에 내보낼 때를 궁금해 할 때. 현재 부트 스트 래퍼의 createcontainer/configurecontainer 메소드를 오버라이드하지 않습니다 ... – obaylis

+0

@obaylis - [여기] (http://www.garrettgirod.com/?p=173)와 같이 CreateContainer를 재정의해야합니다. 끝에). – CodeNaked

+0

감사합니다. 내 부트 스트 래퍼에서 CompositionContainer를 내 보냈습니다. 내보내기가 작동하려면 정적이어야했습니다. 완료되면 CompositionContianer를 내 뷰 모델에 가져올 수 있습니다. – obaylis

4

기본 MEF 컨테이너는 IServiceLocator를 통해 자체를 내 보냅니다.

[Import] 
private IRegionManager _regionManager; 

[Import] 
private IServiceLocator _serviceLocator; 

을 그리고보기 주입을 위해 사용 : 당신은 당신의 뷰 모델에서 서비스 로케이터 및 지역 관리자를 가져올 수

public void ShowSomeView() 
{ 
    IRegion region = _regionManager.Regions["Main"]; 
    var view = _serviceLocator.GetInstance(typeof(SomeView)); 
    region.Add(view, "SomeView"); 
    region.Activate(view); 
} 
+2

이것은 받아 들여진 대답 일 것입니다. – glebd

관련 문제