是否可以在模块中注册区域适配器?
我的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引导程序中执行的操作。
答案 0 :(得分:4)
答案来自codeplex http://compositewpf.codeplex.com/discussions/250892
您描述的场景是 可能。虽然自定义区域 适配器旨在注册 在RegionAdapterMappings中 引导程序的 ConfigureRegionAdapterMappings方法, 可以注册自定义 模块内的区域适配器。
例如,你可以获得一个 对RegionAdapterMappings的引用 在您的Module类中使用 构造函数注入,并调用 RegisterMapping方法就在那里。这是 可能因为有一个名为的类 MefRegionAdapterMappings,其中 将RegionAdapterMappings导出为 共享出口。请注意,你应该 意识到可能的时间问题 因此而产生。你应该 小心注册自定义映射 在尝试创建区域之前 它使用该适配器。