免责声明:Prism新手。我正在疯狂地阅读,以弥补失去的时间:)
上下文:我需要为使用Prism构建的WPF应用程序编写自动验收测试。
问题:我发现,在不使用UI的情况下尝试组合后备ViewModel及其所需的所有内容时,问题就变得很复杂。
我在这里可能是错的... Prism允许您使用命名的占位符(区域)标记 shell 。不同的模块(隔离单元)使用相应的RegionNames注册其 View 。 View 还依赖于通过MEF/Unity注入(inject)的ViewModel(ctor注入(inject))。
因此,将应用程序的编写委派给Prism(或更重要的是,将View)委托(delegate)给Prism。这似乎是一种 View 优先的方法。这在没有UI的情况下引发了 Spanner 的启动应用程序;使用UI进行测试是很痛苦的。
我正在寻找的是演示者优先方法,该方法无需UI即可构成整个对象(ViewModel和依赖项)图。
var viewModel = Someone.ComposeAndGet<ShellViewModel>();
Prism4是否可以通过编写不同的应用程序来实现?还是不支持?
[更新:2011年12月]
http://compositewpf.codeplex.com/discussions/283065
张贴在棱镜论坛上,以获取更多启示;似乎是不可能的。建议将UI测试用于接受测试。棱镜组成UI;因此,对 View 至关重要。
最佳答案
我喜欢Prism框架,但是我很少使用Prism的Regions,因为我认为它迫使我采用“ View 优先”方法。
我不喜欢使用View-First,因为我认为它消除了使用MVVM设计模式的某些优点,例如,将各层分开以及进行单元测试。如果 View 负责创建 View 模型,则要测试 View 模型,您需要创建 View 以创建 View 模型,或者需要手动创建 View 模型。
我也觉得理想的MVVM应用程序应该允许您使用任何UI(甚至命令行)运行该应用程序,并且通过使用Regions,我将ViewModels限制为Prism接口(interface)。
我有时仍会使用Prism的区域,但通常只用于启动页面(例如TitleBarRegion,MenuRegion,ContentRegion)