壁にぶつかった。Serviceクラスを持つ別のアセンブリの参照を追加しました。したがって、新しいインスタンスを作成する代わりに、MEFが役立ちます(ただし、役に立ちません)。HelloScreensサンプルと同様のことを行います。次のビューモデルは、モデルを保持するプロパティも受け入れます。(スタッフ)
public class StaffFormViewModel : Screen
{
[Import]
public StaffService staffService { get; set; }
クラスはMEFによって構築されていないため、明らかにこれは機能しません。しかし、mefで構築したかったとしても、複数のインスタンスを作成する必要があるため、NonSharedを選択する必要があります。しかし、人々はそれが遅いと言います。Caliburn microの例では、新しいインスタンスを作成するためにこのようなものを追加しています。これには、それぞれに5行のコードが必要です。
batch.AddExportedValue<Func<PreferencesCategoriesFormViewModel>>(
() => container.GetExportedValue<PreferencesCategoriesFormViewModel>());
問題は、これを使用することはできますが、コンストラクターでモデルクラスを提供したい場合、MEFによって構築されているためにできないことです。手動で設定する必要があります。私が欲しかったのは、必要なサービスを注入することだけです。これはmefでは不可能ですか?コンテナを参照してcomposeを呼び出すことができるように、コンテナをpublic staticにする必要がありますか?助けてください :)