【发布时间】:2011-12-05 09:50:42
【问题描述】:
免责声明:棱镜新手。我正在疯狂地阅读以弥补失去的时间:)
上下文:我需要为使用 Prism 构建的 WPF 应用程序编写自动化验收测试。
问题:我发现尝试在没有 UI 的情况下组合支持 ViewModel 和他们需要的一切是很复杂的。
我在这里可能错了... Prism 允许您使用命名占位符(区域)标记外壳。不同的模块(隔离单元)使用相应的 RegionNames 注册它们的视图。视图还依赖于通过 MEF/Unity 注入的 ViewModel(ctor 注入)。
- 显示视图
- 触发创建子视图(regionName => 视图注册表)
- 触发创建子视图模型(Mef ctor 注入)。
因此,编写应用程序被委托给 Prism(或更重要的是 View)。这似乎是一种视图优先的方法。这会在没有 UI 的情况下启动应用程序。使用 UI 进行测试很痛苦。
我正在寻找的是演示者优先方法,它在没有 UI 的情况下组成整个对象(ViewModel 和依赖项)图。
var viewModel = Someone.ComposeAndGet<ShellViewModel>();
Prism4 是否可以通过不同的方式编写应用程序,或者它是否不受支持?
[更新:2011 年 12 月]
http://compositewpf.codeplex.com/discussions/283065
发布在 prism 论坛上以获得更多信息;似乎这是不可能的。建议使用 UI 测试进行验收测试。 Prism 组成 UI;因此对视图有至关重要的依赖性。
【问题讨论】:
-
好问题 - 自从我们在我们的解决方案中实施 PRISM 和 MVVM 以来,我一直对它有一种下沉的感觉。我们现在遇到了您描述的测试问题。看来 MVVM 已经被改装到 PRISM 中了,两者玩的不太好。导航是一个理想的例子——要在没有视图的情况下进行测试,我们需要纯粹在视图模型中保持导航状态,但是 PRISM 通过区域进行导航管道将我们硬连接到视图。在 ViewModel 中设置 RegionManagers 和 Regions,然后从 View 绑定到它们可能是一种方式 - 但可惜它似乎不起作用
-
@JamesClose - 是的,这是 Prism 团队(由于我们与 MS 的支持协议)提出的潜在途径之一。 Regions 也可以包含 ViewModels + ViewModels 可以包含 Regions。但是 MS 不支持它。你可以破解一些东西并让它工作..但是它不是 MS 会明确测试或保留未来版本的行为。他们说他们一直在听到类似的请求,但这不在他们的下一个功能队列之上。另一个差距w.r.t。 Prism docs 是 view-model first 的定义 = 来自 VM 的视图注入