私はSilverlightでプリズムを使用していて、MefBootstrapperで自分のコードをベースにしています。次のように定義は次のとおりです。ブートストラップでモジュールのサービスを使用するCreateShell
public class MyBootstrapper : MefBootstrapper
{
protected override DependencyObject CreateShell()
{
return this.Container.GetExportedValue<MainPage>();
}
protected override void InitializeShell()
{
base.InitializeShell();
App.Current.RootVisual = (UIElement)this.Shell;
}
protected override Microsoft.Practices.Prism.Modularity.IModuleCatalog CreateModuleCatalog()
{
return Microsoft.Practices.Prism.Modularity.ModuleCatalog.CreateFromXaml(new Uri("/My;component/ModulesCatalog.xaml", UriKind.Relative));
}
protected override void ConfigureAggregateCatalog()
{
base.ConfigureAggregateCatalog();
// Add this assembly
this.AggregateCatalog.Catalogs.Add(new DeploymentCatalog());
}
}
メインページは、私はすぐにそれを必要とするようModulesCatalog.xamlで、InitializationMode="WhenAvailable"
に設定されていることを別のXAPに住んでいるそのImportingConstructor
で成分を有しています。
私はブレークポイントでチェックし、CreateShell()
メソッドの前にCreateModuleCatalog()
メソッドが呼び出されていますので、インポートしたモジュールを使用できると思います。しかし、私は、CreateShell()
の前に私のモジュールのInitialize()
が呼び出されていないことに気付きました。この仕事をするために私は何ができますか?
だから私は自分のシェルを構築する前にそれを待つつもりですか? CreateShellメソッドは同期メソッドであり、すぐに戻り値を期待しています... – Alex