ViewModelBase中的依赖注入 - 最佳实践

时间:2015-08-27 09:09:37

标签: c# design-patterns inversion-of-control

我在我的LoggerService中使用ViewModelBase,它是在构造函数中注入的:

public abstract class ViewModelBase : INotifyPropertyChanged
{
    private ILoggerService _loggerService;

    public ViewModelBase(ILoggerService loggerService)
    {
       _loggerService = loggerService;
    }

    ...
    ...

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

但是在继承自ViewModelOne的{​​{1}}中,我需要使用此服务,我该怎么办?

  • 公开ViewModelBase中的_loggerService并在ViewModelBase中使用。
  • 要在ViewModelOne
  • 的构造函数中再次注入接口

在您看来,哪种方法最好?或者......你会做什么?

1 个答案:

答案 0 :(得分:2)

您不必两次注射insertBefore。将ILoggerService_loggerService更改为private,如下所示:

protected

或者在supper类中声明一个private ILoggerService _loggerService; ,然后调用它来获取子类中的logger实例:

getLoggerService

请注意,其他类从protected ILoggerService getLoggerService() { return _loggerService; } 获取记录器服务没有任何意义,因此最好将ViewModelBase声明为getLoggerService