これは簡単に実行できます...しかし、実際にはどのサンプルにも含まれていません。
ViewModelLocatorsの「コンテナ」は、MvxApplicationオブジェクトです。デフォルトでは、MvxDefaultViewModelLocator
文字列パラメーターを持つ宣言されたコンストラクターを使用してViewModelインスタンスを構築しようとする規則に基づいています。
独自のViewModelロケーターを使用する場合、最も簡単な方法は、MvxViewModelLocatorから継承し、ViewModelインスタンスを返すパブリックプロパティまたはパブリックメソッドのいずれかを提供することです。
例えば:
public class MyViewModelLocator : MvxViewModelLocator
{
public MyFirstViewModel CreateFirst()
{
return new MyFirstViewModel();
}
public MySecondViewModel CreateSecond(string aParameter)
{
var someLookup1 = ComplicatedStaticThing1.Lookup(aParameter);
var viewModel = new MySecondViewModel(someLookup1);
var someLookup2 = ComplicatedStaticThing2.Lookup(aParameter, someLookup1);
viewModel.DoSomething(someLookup2);
return viewModel;
}
private readonly MyThirdViewModel _third = new MyThirdViewModel();
public MyThirdViewModel Third
{
get
{
return _third;
}
}
}
これよりさらに低くしたい場合は、代わりにIMvxViewModelLocatorを直接実装することもできます。
ViewModelLocatorをアプリケーションに追加するには、インスタンス化してアプリ内に追加するだけです。例:
public class App
: MvxApplication
, IMvxServiceProducer<IMvxStartNavigation>
{
public App()
{
this.RegisterServiceInstance<IMvxStartNavigation>(new StartApplicationObject());
base.AddLocator(new MyViewModelLocator());
// to disable the default ViewModelLocator, use:
// base.UseDefaultViewModelLocator = false;
}
}
注:-設計時のデータを除いて、カスタムViewModelLocatorを実装する必要があることはめったにありません-一般的に、私がやりたいことはすべてViewModel構造内で実行できます。