Я использую Prism с Silverlight и основываю свой код на MefBootstrapper.Это определение выглядит следующим образом:
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() );
}
}
MainPage имеет компонент в ImportingConstructor
, который находится в отдельном Xap, который в ModulesCatalog.xaml имеет значение InitializationMode="WhenAvailable"
как мне нужно сразу.
Я проверил с точками останова, и метод CreateModuleCatalog()
вызывается перед методом CreateShell()
, так что вы можете подумать, что я смогу использовать мой импортированный модуль.Тем не менее, я замечаю, что мой модуль Initialize()
не вызывается раньше CreateShell()
Почему бы и нет?И что я могу сделать, чтобы сделать эту работу?