我正在使用PRISM在MVVM架构中实现WPF客户端应用程序(我是PRISM的新手)。
WPF应用程序有3个主要区域:
左侧区域有一个带有“获取按钮”的视图,按下该视图时应连接到“FETCH”WCF服务,获取项目,断开与服务的连接并在视图中显示项目。
右侧区域有一个没有按钮的视图。此视图应每隔10分钟连接到“POLL”WCF服务,获取项目,断开与服务的连接并在视图中显示项目。
侧面区域有一个没有按钮的视图。此视图应连接到“NOTIFICATIONS”WCF服务,并在整个应用程序生命周期内保持与其连接。它应该从服务接收回调,应该在侧视图中显示。
这是image,显示它应该是什么样子:
image http://s11.postimage.org/xfjheqc0h/SO_Question_4.png
问题:
我应该将什么传递给包含'Fetch View'的'FETCH MODULE'的构造函数?应该是服务本身还是应该是一些渠道工厂?我认为应该是某种渠道工厂,因为每次用户按下“获取”按钮时都需要启动与“获取WCF服务”的连接。
同样的问题是'POLL MODULE'。
关于“通知模块” - 我应该通过“通知服务客户端”的单例实例吗? (因为应用程序只需要向服务打开一个客户端,并且它应该始终保持连接)
为了避免由于超时而导致的“通知”客户端故障,我需要实现某种“心跳”,它将在“通知”WCF服务上调用存根方法,以便它不会t超时。我应该在哪里放置心跳代码?它应该在“通知模块”中吗?谁应该发起呢? (我相信它应该在某种背景线程中运行)
我目前正在使用MEF,我真的不知道我在做什么(我用[导出]和[ViewModel] setter用[Import]等装饰了视图,但我仍然没有了解我如何控制谁加载以及何时加载)。另外 - 我不明白依赖注入如何在MEF中工作。使用'MEF Bootstrapper'和'Unity Bootstrapper'之间有什么区别?
我见过有些人使用MEF,只使用[Import]和[Export]属性,有些人从'IModule'继承他们的模块,并用EventAggreagator,Container和RegionManager实现'InitializeModule'。这些方法之间有什么区别,何时应该使用每种方法?
您是否建议使用“添加服务参考...”或手动创建“IChannelFactory”? (PROs \ CONs)
服务客户应该是模块的一部分还是基础架构的一部分?
我在互联网上搜索了很多WPF + PRISM + WCF的样本,找不到我可以使用的任何好样本,所以我可以理解如何将服务注入到我的视图模型中。任何人都可以提供任何示例\示例链接吗?
以下4个问题是严格的Cookie:
我提到的所有3个WCF服务都使用相同的“用户名+密码”身份验证方法,这意味着我需要在加载应用程序时弹出“登录”窗口。在PRISM和MVVM中执行此类操作的最佳实践是什么? “登录”窗口是否应该替换“Shell”窗口? (我不这么认为,那应该是什么?)
当用户输入用户名+密码时 - 我是否应该尝试仅连接第一个服务,如果成功 - 断开连接并关闭“登录”视图(意思是,我认为连接将是与其他服务一起成功。)
我可以在哪里存储用户输入的用户名+密码,以便应用程序可以继续重新连接到服务,而无需每次都要求用户提供凭据?
如果由于某种原因,其中一个模块尝试连接到其中一个WCF服务,并且由于凭据而无法成功,那么您建议采用的方法是什么?我是否应该举起一个强制所有其他模块与其服务断开连接的事件,然后弹出“登录”视图?
很抱歉很长的帖子......