私のシェル ウィンドウには、RequestNavigate によるビューの切り替えを可能にするワークスペース領域があります。ビューの初期化が次のようになるように、View-First アプローチで Unity を使用しています。
public partial class WelcomeView : UserControl
{
public WelcomeView(WelcomeViewModel vm)
{
InitializeComponent();
this.DataContext = vm;
}
}
アプリケーションが読み込まれたら、BootStrappers の InitializeShell が次のように見えるように、既定のビューに移動したいと考えています。
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 のコンストラクターにいくつかのサービスを挿入する必要があります。
public class WelcomeViewModel : INotifyPropertyChanged
{
public WelcomeViewModel(ISomeService someService)
{
// Use some service
someService.SomeEventOccured += new Action(someService_SomeEventOccured);
}
...
}
問題は、ISomeService がモジュールによって提供される場合です。モジュールは InitializeShell が呼び出された時点で初期化されていないため、WelcomeViewModel を構築できず、WelcomeView も構築できません。
これを行う適切な方法は何ですか?