WPF, Prism, MEF. Зарегистрировать адаптер региона в модуле?
Можно ли зарегистрировать адаптер региона в модуле?
У меня есть ContentControl в моем Shell.xaml, установленном на регион "MainRegion", который в настоящее время заполняется модулем, содержащим элемент управления AvalonDock. В настоящее время у меня в приложении Shell есть адаптер региона AvalonDock, но я хотел бы поместить его в модуль и зарегистрировать себя. Я хочу сохранить гибкость этой программы, чтобы, если мы решим использовать что-то отличное от AvalonDock, я мог легко использовать другой модуль, не изменяя свою сборку Shell (удаляя адаптер области avalondock).
Я представляю, что-то подобное возможно. Кто-нибудь делал это раньше?
В загрузчике прямо сейчас есть:
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
var regionBehaviorFactory = Container.GetExportedValue<IRegionBehaviorFactory>();
var regionManager = Container.GetExportedValue<IRegionManager>();
mappings.RegisterMapping(typeof(Pane), new AvalonRegionAdapter(regionBehaviorFactory, regionManager));
return mappings;
}
Это то, что я хотел бы выполнить в модуле вместо загрузчика оболочки.
1 ответ
Ответ здесь от codeplex http://compositewpf.codeplex.com/discussions/250892
Сценарий, который вы описываете, возможен. Хотя настраиваемые адаптеры регионов предназначены для регистрации в RegionAdapterMappings в методе Configure RegionAdapterMappings загрузчика, его можно зарегистрировать в модуле.
Например, вы можете получить ссылку на RegionAdapterMappings в вашем классе Module, используя инжекцию конструктора, и вызвать там метод RegisterMapping. Это возможно, поскольку существует класс с именем MefRegionAdapterMappings, который экспортирует RegionAdapterMappings в качестве общего экспорта. Обратите внимание, что вы должны знать о сроках, которые могут возникнуть из-за этого. Вы должны быть осторожны при регистрации пользовательского сопоставления, прежде чем пытаться создать регион, который использует этот адаптер.