1

我正在使用 PRISM 在 MVVM 架构中实现 WPF 客户端应用程序(我是 PRISM 新手)。

WPF 应用程序有 3 个主要区域:

  • 左区
  • 右区
  • 边区

左侧区域有一个带有“获取按钮”的视图,按下该按钮时应连接到“获取”WCF 服务、获取项目、断开与服务的连接并在视图中显示项目。

右侧区域有一个没有按钮的视图。此视图应每 10 分钟连接到“POLL”WCF 服务、获取项目、断开与服务的连接并在视图中显示项目。

侧面区域有一个没有按钮的视图。此视图应连接到“通知”WCF 服务,并在整个应用程序生命周期中保持与它的连接。它应该接收来自服务的回调,这些回调应该显示在侧视图中。

这是一张显示它应该是什么样子的图像:

图片

问题 :

  1. 我应该将什么传递给包含“Fetch View”的“FETCH MODULE”的构造函数?它应该是服务本身还是应该是某个渠道工厂?我认为它应该是某种通道工厂,因为每次用户按下“获取”按钮时都需要启动与“获取 WCF 服务”的连接。

  2. 同样的问题也适用于“轮询模块”。

  3. 关于“通知模块”-我应该传递“通知服务客户端”的单例实例吗?(因为应用程序只需要打开一个客户端到服务,它应该一直保持连接)

  4. 为了避免“通知”客户端由于超时而出现故障,我需要实现某种“心跳”,它将调用“通知”WCFservice 上的存根方法,这样它就不会超时。我应该在哪里放置心跳的代码?它应该在“通知模块”中吗?谁应该发起它?(我相信它应该在某种后台线程中运行)

  5. 我目前正在使用 MEF,但我真的不知道自己在做什么(我用 [Export] 和 [ViewModel] setter 用 [Import] 等装饰了视图,但我仍然不明白我如何控制谁得到加载和何时)。另外 - 我不明白依赖注入在 MEF 中是如何工作的。使用“MEF Bootstrapper”和“Unity Bootstrapper”有什么区别?

  6. 我见过一些人使用 MEF 并且只使用 [Import] 和 [Export] 属性,还有一些人从“IModule”继承他们的模块并使用 EventAggreagator、Container 和 RegionManager 实现“InitializeModule”。这些方法之间有什么区别,什么时候应该使用每种方法?

  7. 您建议使用“添加服务参考...”还是手动创建“IChannelFactory”?(优点缺点)

  8. 服务客户端应该是模块的一部分还是基础结构的一部分?

  9. 我在互联网上搜索了很多 WPF+PRISM+WCF 的示例,但找不到任何可以使用的好示例,因此我可以了解如何将服务注入到我的视图模型中。谁能提供任何示例\示例链接?

以下 4 个问题是一个棘手的问题:

  1. 我提到的所有 3 个 WCF 服务都使用相同的“用户名+密码”身份验证方法,这意味着我需要在应用程序加载时弹出一个“登录”窗口。在 PRISM 和 MVVM 中做这样的事情的最佳实践是什么?“登录”窗口应该取代“外壳”窗口吗?(我不这么认为,那应该是什么?)

  2. 当用户输入用户名+密码时 - 我是否应该尝试仅连接到第一个服务,如果成功 - 断开连接并关闭“登录”视图(意思是,我假设与其他服务的连接将成功) .

  3. 我可以在哪里存储用户输入的用户名+密码,以便应用程序可以继续重新连接到服务,而无需每次都要求用户提供凭据?

  4. 如果出于某种原因,您建议我应该采取什么方法 - 其中一个模块尝试连接到 WCF 服务之一,但由于凭据而没有成功?我是否应该引发一个事件,迫使所有其他模块断开其服务,然后弹出“登录”视图?

对不起,很长的帖子...

4

0 回答 0