私は参照アプリケーションが動作していましたが、今は壊れていて、理由を理解できません。私に問題を与えているコードは、基本的にはPrismのModularityWithMefクイックスタートの例です。ブートストラップモジュールは、私のモジュールディスカバリロジックを追加する以外は、クイックスタートの正確なコピーです。だから私はここにそれを含めていない。私がShellのViewコードの背後にある問題は、QuickStartのShell Codebehindのほぼ正確なコピーです。コードは -プリズムw/Mefブートストラップの問題
namespace MvvmRefVer
{
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Diagnostics;
using System.Globalization;
using System.Windows;
using Microsoft.Practices.Prism.Logging;
using Microsoft.Practices.Prism.Modularity;
[Export]
public partial class Shell : Window, IPartImportsSatisfiedNotification
{
[Import(AllowRecomposition = false)]
private CallbackLogger logger;
[Import(AllowRecomposition = false)]
private IModuleManager moduleManager;
public Shell()
{
this.InitializeComponent();
}
public void OnImportsSatisfied()
{
}
private void WindowClosing(object sender, CancelEventArgs e)
{
Application.Current.Shutdown();
}
private void WindowLoaded(object sender, RoutedEventArgs e)
{
this.moduleManager.LoadModule("NavigationViewControlModule");
}
}
問題は、この機能のブートストラップで発生 - ModuleManagerによって定義上
protected override DependencyObject CreateShell()
{
var d = this.Container.GetExportedValue<Shell>();
return d;
}
GetExportedValueが呼び出され
と[Import(AllowRecomposition = false)]
が存在し、関数呼び出しが未定義例外を生成します。 Import行をコメントアウトすると、シェルは正しくロードされますが、moduleManagerは初期化されません。
私の問題は、問題の内容を理解するのに十分なMEFの経験がないことです。 mefカタログを見ると、Prism Modularityライブラリがロードされていることがわかります。
リンクありがとうございます。そこに情報があれば、私は自分の問題を見つけました。オンデマンドでロードするモジュールがありましたが、データが初期化される前に起動時にロードされていました。そのモジュールはnull引数の例外をスローしていました。 MEFを愛するようになりますが、これらのタイプの問題を抱えてトラブルを起こすための新しい考え方を学ばなければなりません。 –