Я хочу загружать модули, когда мое приложение загружается, и чтобы они помещали свои представления в регион (см. Также эту статью MSDN ) в командной консоли (основной вид). В настоящее время я загружаю модуль по требованию, и он работает просто отлично. (Я загружаю модуль кнопкой, которая вызывает this.moduleManager.LoadModule("ModuleB");
, где moduleManager
определяется как [Import(AllowRecomposition = false)] private IModuleManager moduleManager;
. Все это происходит из примера приложения ModularityWithMef.Desktop .) Вот соответствующий код:
Модуль
[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 регион
<TabControl Regions:RegionManager.RegionName="ContentRegion" />
Когда я переключаюсь на загрузку модуля, когда он доступен ([ModuleExport(typeof(ModuleB), InitializationMode = InitializationMode.WhenAvailable)]
), я получаю исключение ModuleInitializeException, когда загрузчик создает оболочку, говоря: «Этот RegionManager не содержит регион с именем« ContentRegion »». Это говорит мне о том, что существует проблема синхронизации создания региона в командной консоли и инициализации модуля.
Итак, вот мой вопрос: Как зарегистрировать представление модуля в области оболочки при обнаружении без необходимости использовать инициализацию OnDemand и вручную загрузить модуль?