0

Caliburn Micro フレームワークに基づくデスクトップ アプリケーションがあります。すべてがうまく機能します。現在、同じアプリをプラグインとして Outlook に移植しようとしています。

デスクトップ アプリでは、app.xaml 内のエントリに基づいて、Caliburn がブートストラップの場所を認識し、インスタンス化します。

Outlook プラグインの場合、ThisAddIn.ThisAddIn_Startup() 内で明示的にインスタンス化するオーバーライドされたブートストラップを作成しました。もちろん、これは Application オブジェクトを使用しません。

このようなコードを使用して特定のビューを呼び出すこともできます

var windowManager = IoC.Get<IWindowManager>();
windowManager.ShowDialog(new MyViewModel());

これにより、ビュー モデルに関連付けられたビューが Outlook のモーダル ウィンドウに表示されます (したがって、Caliburn Micro が Outlook プラグイン内のビュー モデルからビューを見つけることができることを検証します)。

どうすればよいかわからなかったのは、シェルをインスタンス化して、その機能を使い始めることができるようにすることです。

私のブートストラッパーは BootStrapper から派生し、シェル ビュー モデルの実装を IShell のエクスポートとして MEF コンテナーに登録したので、Caliburn はシェル ビュー モデルを自動的にインスタンス化し、使用を開始することを期待していました。それは起こっていません。

私の目標は、ユーザー アクションに基づいてロードする他のビューのコンテナーとして、プラグインのタスク ペイン内にシェルをロードすることです。

これを機能させる方法に関するアイデアやヒントはありますか? 一般に、Outlook または Office プラグインの作業ウィンドウ内にシェル実装をロードした人はいますか?

ありがとう!

4

1 に答える 1

2

経由でインスタンス化するということですかBootstrapper<Shell>。これは下でウィンドウマネージャーを使用しますが、それがOutlookにまで及ぶとは思いません。上記と同じコードを使用してシェルを手動で初期化することを妨げるものは何もありません。構成はアプリケーションの残りを処理します。

デフォルトでは IoC.Get が呼び出さActivator.CreateInstanceれるため、問題が MEF にある可能性があります。シェルを開くことを駆動するメソッドは、DisplayRootViewFor()この行を呼び出します。

 windowManager.ShowWindow(IoC.GetInstance(viewModelType, null), null, settings);

MEF が正しく接続されていないと、失敗してシェルがロードされません。

于 2013-05-29T08:20:05.210 に答える