解决MVVM中的Prism服务问题

时间:2013-02-16 18:26:50

标签: c# mvvm prism unity-container

尝试在Container中解析我存储的服务对象(主要是Singleton接口),

域模块 ViewModels 将使用服务模块的服务

您在何处以及如何推荐,在域模块内或在域模块的 ViewModels 内解析?

如果我可以在ViewModel的构造函数中执行此操作,请注意以下代码,在注册服务后,如果我不想这样做,该怎么办:

    public DetailsViewModel(IWService wSvc,)
    {
        wService = wSvc;
    }

在“视图模型”中获取Services对象(存储在Container中)的最佳方法是什么?

我在这里提供的仅作为样本。 感谢您的帮助

1 个答案:

答案 0 :(得分:2)

我建议您的ViewModel通过构造函数的依赖注入获取它们使用的服务。无论您决定使用哪种方法,都应该记住,其中一个主要概念是测试ViewModel的能力。通常,这将涉及能够为您的ViewModel提供服务的模拟实现,以独立于这些服务测试其行为。如果使用构造函数注入,则可以简单地创建模拟服务,然后将它们传递给ViewModel的构造函数,以便在编写单元测试时进行测试。即使您此时并不打算编写单元测试,我认为这是养成遵循某种设计方案的习惯的正当理由。

public class SomeViewModel
{
    private IEventAggregator events;
    private ISomeService someService;

    public SomeViewModel(IEventAggregator events, ISomeService someService)
    {
        this.events = events;
        this.someService = someService;
    }
}