ビューが正しいViewModelにデータバインドするために使用するapp.xamlで定義しているViewModelLocatorクラスがあります。
DataContext="{Binding HomeViewModel, Source={StaticResource Locator}}"
Prism と Unity を使用しており、ViewModelLocator クラスにはアプリケーション レベルの Unity コンテナーへの参照が必要です。
IUnityContainer を ViewModelLocator の ctor に挿入したかったのですが、ViewModelLocator はパラメーターなしの ctor を使用して app.xaml からインスタンス化されます。
アプリケーション レベルのコンテナーにアクセスするための推奨される方法はありますか? アプリ内の他のすべてのクラスについては、ctor インジェクションを使用してグローバル コンテナーを取得するだけです。
ViewModelLocator に対して現在行っていることは、コンテナーを格納するために BootStrapper クラスで静的変数を定義することです。UnityBootStrapper の CreateContainer メソッドをオーバーライドしてコンテナーを作成します。
protected override IUnityContainer CreateContainer()
{
BootStrapper.DIContainer = base.CreateContainer();
return BootStrapper.DIContainer;
}
次に、ViewModelLocatorクラスで BootStrapper.DIContainer プロパティを参照してビューモデルを登録します。
BootStrapper.DIContainer.RegisterType<IShellViewModel, DesignShellViewModel>();
これは正常に動作しますが、ブートストラップでこの静的プロパティを参照する必要があるアプリケーション内の唯一の場所であり、可能であれば削除したいと考えています。
ありがとうマイケル