Ich möchte Module laden, wenn meine App lädt und sie ihre Ansichten in eine region (siehe auch this MSDN article) in der Shell (die Hauptansicht). Ich lade gerade ein Modul auf Anfrage und es funktioniert gut. (I laden Sie das Modul mit einer Schaltfläche, die this.moduleManager.LoadModule("ModuleB");
nennt, wo moduleManager
als [Import(AllowRecomposition = false)] private IModuleManager moduleManager;
definiert Dies alles kommt aus der ModularityWithMef.Desktop Beispielanwendung..) Hier ist der entsprechende Code:Anzeigen von Modulen in einer Prism-Region, wenn verfügbar
Modul
[ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.OnDemand)]
public class ModuleB : IModule
{
[Import(AllowRecomposition = false)] private IRegionManager _regionManager;
/// <summary>
/// Initializes a new instance of the <see cref="ModuleB"/> class.
/// </summary>
public ModuleB()
{
}
/// <summary>
/// Notifies the module that it has be initialized.
/// </summary>
public void Initialize()
{
_regionManager.AddToRegion("ContentRegion", new ModuleBView());
}
}
XAML Region
<TabControl Regions:RegionManager.RegionName="ContentRegion" />
Wenn ich zum Laden des Moduls wechsle, wenn verfügbar ([ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.WhenAvailable)]
), bekomme ich eine ModuleInitializeException, wenn der Bootstrapper die Shell erstellt und sagt: "Dieser RegionManager enthält keine Region mit dem Namen 'ContentRegion'." Dies sagt mir, dass es ein Timing-Problem mit der Erstellung der Region in der Shell und der Initialisierung des Moduls gibt.
Also hier ist meine Frage: Wie registriere ich die Ansicht des Moduls mit der Region der Shell nach Entdeckung und ohne OnDemand Initialisierung zu verwenden und das Modul manuell zu laden?
Danke für das Posten. :) – VipX1