Catel和基类的继承

时间:2017-08-03 20:24:37

标签: wpf mvvm ioc-container catel

我有2个不同的视图模型,它继承自基础模型。目前在基本控制器中通过

解决了一些服务
ServiceLocator.Default.ResolveType<xxx>

我知道它不是最好的方法,因为它打破了DI。我还读到它的反模式有多个构造函数。我应该如何威胁这种情况?由于视图模型的大部分代码都是相同的

由于

1 个答案:

答案 0 :(得分:1)

为什么不在构造函数中注入这些服务?像这样:

public class BaseVM
{
    protected readonly IService1 _service1;
    public BaseVM(IService1 service1)
    {
       _service1 = service1
    }
}

public class InheritedVM1: BaseVM
{
    public InheritedVM1(IService1 service1, ...other args...): base(service1
    {
        //...
    }
}

public class InheritedVM2: BaseVM
{
    public InheritedVM2(IService1 service1, ...other args...): base(service1
    {
        //...
    }
}

IoC将通过InheritedVM的构造函数注入您的服务,在使用注入的服务调用base之后,您可以使用_service1字段来使用它们。