繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM