昨年、ページ ナビゲーションを使用し、MVVM を使用しない WPF アプリケーションを作成しました。最近、Caliburn Micro と MEF を使用して WPF MVVM で行ったのと同じ顧客向けに新しいアプリケーションを構築するように依頼されました。現在、顧客から、新しいアプリケーションを古いアプリケーションに統合するように依頼されています。
私の考えは、古いアプリケーションに新しいページを追加し、新しいアプリケーションのシェルをこのページの に統合することでしたContentControl
。
私の問題は、古いアプリケーションが
<StartupUri="Views\NavWindow.xaml">
app.xaml のエントリで、新しいアプリケーションは次のようなブートストラップによって開始されます。
<local:AppBootstrapper x:Key="bootstrapper" />
AppBootstrapper は次のようになります
class AppBootstrapper : Bootstrapper<ShellViewModel>
{
private CompositionContainer container;
protected override void Configure()
{
container = new CompositionContainer(new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));
CompositionBatch batch = new CompositionBatch();
batch.AddExportedValue<IWindowManager>(new WindowManager());
batch.AddExportedValue<IEventAggregator>(new EventAggregator());
batch.AddExportedValue(container);
container.Compose(batch);
}
protected override object GetInstance(Type serviceType, string key)
{
string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key;
var exports = container.GetExportedValues<object>(contract);
if (exports.Count() > 0)
{
return exports.First();
}
throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
}
}
したがって、私が理解している限り、新しいアプリの場合、ブートストラッパーはアプリ全体を初期化し、 を呼び出し、ShellViewModel
最終的にShellView
.
私EventAggregator
は新しいアプリで を使用して、あるビューモデルから別のビューモデルにメッセージを送信するため、ブートストラップを取り除き、Caliburn Micro のビュー ファースト モデルを使用することはできないと思います。
したがって、私の問題は次のとおりです。古いアプリから自分でブートストラップを呼び出すことができますか?もしそうなら、そのインスタンスをどこに保存する必要がありますShellView
か?
どんな助けでも大歓迎です。