私のブートストラップのモジュールをシェルのメインビューのタブコントロールにロードするシェルプロジェクトがあります。MEFを使ってシェルからプリズムモジュールビューをロード
タブアイテムに閉じるボタンを実装しました。これで、シェルからモジュールビューを再読み込みする方法の質問が表示されます。
は
moduleManager.LoadModule("ModuleA");
を使用してみましたが、モジュールが最初にロードされ、この唯一の作品。上記を呼び出すと、モジュールが読み込まれて初期化され、ビューが表示されます。私はビューをもう一度閉じると、私はこれを試して2回目(私はそれがすでに読み込まれているようにモジュールを再初期化しないと思います)ビューをreshowしません。このアプローチの
var moduleAView = ServiceLocator.Current.GetInstance<ModuleAView>();
regionManager.Regions["TabRegion"].Add(ModuleAView);
regionManager.Regions["TabRegion"].Activate(ModuleAView);
トラブルがどのように私のシェルは1行目のtype ModuleAViewについて知っているんされています
だから、私はしかし、私は私のシェルで、次の線に沿って何かを使用して考えましたか?私はモジュールAへの参照を持っていないし、モジュールAを追加したくない。私はModuleAViewが実装する共通のインターフェースについて考えました。これはモジュールとシェルの間で共有できますが、上記のようにServiceLocator.GetInstanceアプローチを使用しようとすると構図エラーが発生しました。
ご協力いただきありがとうございます。
PS これは私が試したモジュールのモジュールコードです。
[ModuleExport(typeof(ModuleA), InitializationMode = InitializationMode.OnDemand)]
[Module(ModuleName="ModuleA")]
public class ModuleA : IModule
{
private IRegionManager _regionManager;
[ImportingConstructor]
public ModuleA(IRegionManager regionManager)
{
this._regionManager = regionManager;
}
public void Initialize()
{
// add the search view to the region manager.
this._regionManager.RegisterViewWithRegion("TabRegion", typeof(Views.ModuleAView));
}
}