2012-06-26 3 views
0

내 셸 창에는 RequestNavigate를 통한보기 전환을 허용하는 작업 영역이 있습니다. 내가보기 - 첫 번째 방법으로 유니티를 사용하고 같은 것을보기 초기화 모양 같은 :InitializeShell with Prism의 모듈 종속성

public partial class WelcomeView : UserControl 
{ 
    public WelcomeView(WelcomeViewModel vm) 
    { 
     InitializeComponent(); 
     this.DataContext = vm; 
    } 
} 

응용 프로그램이로드, 나는 다음과 같이 InitializeShell 보이는 내 BootStrappers 있도록 기본보기로 이동하려는 경우 :

public class WelcomeViewModel : INotifyPropertyChanged 
{ 
    public WelcomeViewModel(ISomeService someService) 
    { 
     // Use some service 
     someService.SomeEventOccured += new Action(someService_SomeEventOccured); 
    } 

    ... 
} 
: 이제

protected override void InitializeShell() 
{ 
    Application.Current.MainWindow = (Window)Shell; 
    Application.Current.MainWindow.Show(); 

    var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
    regionManager.RequestNavigate("MainWorkspaceRegion", "WelcomeView"); 
} 
, 내 기본보기, WelcomeView는 WelcomeViewModel 생성자에 주입하고, 차례로, WelcomeViewModel은 생성자 주입하는 일부 서비스가 필요가 필요합니다

InitializeShell을 호출 할 때 모듈이 초기화되지 않았기 때문에 ISomeService가 모듈에서 제공되는 경우 문제가 발생합니다. 즉, WelcomeViewModel을 생성 할 수 없으며 다시 WelcomeView도 사용할 수 없습니다.

어떻게해야할까요? 그래서이 모듈은 의존성이

[ModuleDependency("SomeModule")] 
[ModuleDependency("SomeOtherModule")] 
public class MyModule : IModule { } 

그리고이 포함 종속 된 모듈을 포함

답변

2

이 작업을 수행하는 적절한 방법은 모듈 의존성

을 사용하는 것입니다

[Module(ModuleName = "SomeModule")] 
public class MyOtherModule: IModule 

"마법의 문자열"을 사용하지 않는 것이 좋습니다. 여기에 공통 이름/인프라 프로젝트에 정적 클래스가 포함되어 있습니다. 모든 모듈.

이렇게하면 프리즘이 올바른 순서로 모듈을로드하여 종속성이 항상 해결됩니다.

1

요청한 부분을 나중에 이동하십시오. 부트 스트 래퍼가 호출되고이를 요약하는 특정 순서가 있습니다.

  1. CreateShell 방법
  2. InitializeShell이 ​​방법은
  3. 이라고
  4. InitializeModules 메소드가 호출 불린다. 당신이 그들에 따라보기로 이동하려고 할 때 모듈도로드되지 않기 때문에

    protected override void InitializeModules() 
    { 
        base.InitializeModules(); 
    
        var regionManager = ServiceLocator.Current.GetInstance<IRegionManager>(); 
        regionManager.RequestNavigate("MainWorkspaceRegion", "WelcomeView"); 
    } 
    

생성 모듈 dependecies이 작동하지 않습니다. 또한 나는 왜 당신이 Service locator를 사용하고 있는지 지적하고자한다. 부트 스트 래퍼에서 작업 중이므로 컨테이너에 직접 액세스 할 수 있습니다. 전체로드 순서는 here

입니다.