积极答复者
Prism4 Module之间的数据共享?

问题
-
DLL是目录加载
IOC用的是MEF
出于需要,现在设计是这样的:
ModuleA:数据的获取
ModuleB:获取ModuleA得到的数据,在view上显示,要如何做,类似B的view把A当作数据源?
现在的实现是
public interface IObservableItems { ObservableCollection<MyInfo> MyItems { get; } } //模块A [ModuleExport(typeofModuleA))] public classModuleA : IModule, IObservableAlarm { #region IModule Members public void Initialize() { this.MyItems = new ObservableCollection<AlarmInfo>(); //获取数据 } #endregion #region IObservableAlarm Members [Export(typeof(IObservableItems))] public ObservableCollection<MyInfo> MyItems { get; private set; } #endregion } //模块B [ModuleExport(typeof(BModule))] public class BModule: IModule { private readonly IRegionManager regionManager; [ImportingConstructor] public BModule(IRegionManager regionManager) { this.regionManager = regionManager; } #region IModule Members public void Initialize() { regionManager.RegisterViewWithRegion(RegionNames.MyListRegion, typeof(BView)); } #endregion } [Export(typeof(BViewModel))] [PartCreationPolicy(CreationPolicy.NonShared)] public class BViewModel: NotificationObject { //这里ViewModel中如何获得模块A的数据?? [ImportingConstructor] public AlarmListViewModel()//IObservableItems observableItems) { } }
答案
-
不一定对,我先说说感觉。
我觉得首先不要把Prism看问题的方式和MEF的那一套混杂在一起。不妨先把MEF忘掉。
Prism应用可以组合一个个Module,那么某个Module通过IModule接口声明自己是Module,这就够了,别让它再去担别的责任。public class ModuleA : IModule, IObservableAlarm,这个IObservableAlarm让别的类实现岂不更好吗?谁说Module内只允许存在一个类的?
[Export(typeof(IObservableAlarm))] public class AnotherClassInModuleA : IObservableAlarm { }
然后ModuleB依赖ModuleA,这个按需要,可要可不要。[ModuleExport(typeof(ModuleB), DependsOnModuleNames= new string[] { "ModuleA" })] public class ModuleB : IModule { //... }
ModuleB里的ViewModel可以Import这个IObservableAlarm,这时候才让MEF帮你找实现。
[ImportingConstructor] public ModuleBViewModel(IObservableAlarm dataService) { // dataService.MyItems; }
- 已标记为答案 dk.huang 2010年12月20日 0:50
全部回复
-
不一定对,我先说说感觉。
我觉得首先不要把Prism看问题的方式和MEF的那一套混杂在一起。不妨先把MEF忘掉。
Prism应用可以组合一个个Module,那么某个Module通过IModule接口声明自己是Module,这就够了,别让它再去担别的责任。public class ModuleA : IModule, IObservableAlarm,这个IObservableAlarm让别的类实现岂不更好吗?谁说Module内只允许存在一个类的?
[Export(typeof(IObservableAlarm))] public class AnotherClassInModuleA : IObservableAlarm { }
然后ModuleB依赖ModuleA,这个按需要,可要可不要。[ModuleExport(typeof(ModuleB), DependsOnModuleNames= new string[] { "ModuleA" })] public class ModuleB : IModule { //... }
ModuleB里的ViewModel可以Import这个IObservableAlarm,这时候才让MEF帮你找实现。
[ImportingConstructor] public ModuleBViewModel(IObservableAlarm dataService) { // dataService.MyItems; }
- 已标记为答案 dk.huang 2010年12月20日 0:50