[英]WPF, Prism, MEF. Register region adapter within a module?
是否可以在模块中注册区域适配器?
我在我的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引导程序中执行的操作。
答案来自codeplex http://compositewpf.codeplex.com/discussions/250892
您正在描述的场景是可能的。 虽然自定义区域适配器旨在在Bootstrapper的ConfigureRegionAdapterMappings方法中的RegionAdapterMappings中注册,但可以从模块中注册自定义区域适配器。
例如,您可以使用构造函数注入获取Module类中RegionAdapterMappings的引用,并在那里调用RegisterMapping方法。 这是可能的,因为有一个名为MefRegionAdapterMappings的类,它将RegionAdapterMappings导出为共享导出。 请注意,您应该了解由此引起的时序问题。 在尝试创建使用该适配器的区域之前,应该小心注册自定义映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.