2011-03-23 75 views
3

是否可以在模块中注册区域适配器?WPF,棱镜,MEF。在模块中注册区域适配器?

我的Shell.xaml中有一个ContentControl设置为区域“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; 
} 

这是我想什么的模块,而不是壳牌引导程序来执行。

回答

4

答案就在这里CodePlex从http://compositewpf.codeplex.com/discussions/250892

您所描述的情况是 可能。虽然自定义区域 适配器拟注册 在RegionAdapterMappings在 引导程序的 ConfigureRegionAdapterMappings方法, 有可能从一个模块内注册自定义 区域适配器。

你可以,例如,通过使用 构造器注入获得 参考你的模块类RegionAdapterMappings ,并调用 RegisterMapping方法那里。这可能是 ,因为有一个名为 MefRegionAdapterMappings的类,其中 将RegionAdapterMappings导出为 共享导出。请注意,您应该知道 可能由此产生的时间问题。在尝试创建使用该适配器的区域 之前,您应该注意 以注册自定义映射 。