WPF, Prism, MEF. Зарегистрировать адаптер региона в модуле? - PullRequest
3 голосов
/ 23 марта 2011

Можно ли зарегистрировать адаптер региона в модуле?

У меня 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 Ответ

4 голосов
/ 23 марта 2011

Ответ здесь от codeplex http://compositewpf.codeplex.com/discussions/250892

Возможный сценарий, который вы описываете.Хотя настраиваемые адаптеры регионов предназначены для регистрации в RegionAdapterMappings в методе Bootstrapper ConfigureRegionAdapterMappings, можно зарегистрировать пользовательский адаптер региона из модуля.

Можно, например, получить ссылку на RegionAdapterMappingsв своем классе Module с помощью инжектора конструктора и вызовите там метод RegisterMapping.Это возможно, поскольку существует класс с именем MefRegionAdapterMappings, который экспортирует RegionAdapterMappings в качестве общего экспорта.Обратите внимание, что вы должны знать о сроках, которые могут возникнуть из-за этого.Вы должны быть осторожны при регистрации пользовательского сопоставления, прежде чем пытаться создать регион, использующий этот адаптер.

...