WPF,Prism,MEF。在模块中注册区域适配器?

时间:2011-03-23 16:28:27

标签: wpf prism mef prism-4 regionadapter

是否可以在模块中注册区域适配器?

我的Shell.xaml中的ContentControl设置为区域“MainRegion”,当前使用包含AvalonDock控件的模块填充。我目前在我的Shell应用程序中有AvalonDock区域适配器,但是想将它放在模块中并注册自己。我希望保持这个程序的灵活性,这样如果我们决定使用AvalonDock以外的东西,我可以轻松地使用另一个模块,而无需修改我的Shell程序集(删除avalondock区域适配器)。

我想这样的事情是可能的。有没有人这样做过?

现在在bootstrapper中是:

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;
}

这就是我想在Module而不是Shell引导程序中执行的操作。

1 个答案:

答案 0 :(得分:4)

答案来自codeplex http://compositewpf.codeplex.com/discussions/250892

  

您描述的场景是   可能。虽然自定义区域   适配器旨在注册   在RegionAdapterMappings中   引导程序的   ConfigureRegionAdapterMappings方法,   可以注册自定义   模块内的区域适配器。

     例如,你可以获得一个   对RegionAdapterMappings的引用   在您的Module类中使用   构造函数注入,并调用   RegisterMapping方法就在那里。这是   可能因为有一个名为的类   MefRegionAdapterMappings,其中   将RegionAdapterMappings导出为   共享出口。请注意,你应该   意识到可能的时间问题   因此而产生。你应该   小心注册自定义映射   在尝试创建区域之前   它使用该适配器。