Reputation: 737
I am using a LoggerService
in my ViewModelBase
, which is injected in constructor:
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));
}
}
But in my ViewModelOne
, which inherits from ViewModelBase
, I need to use this service, what should I do?
_loggerService
in ViewModelBase
and use it from ViewModelOne
.ViewModelOne
.In your opinion, which would be the best approach? Or...what would you do?
Upvotes: 0
Views: 195
Reputation: 2535
Make your ILoggerService protected and readonly so that only base class can assign value on it.
protected readonly ILoggerService _loggerService;
Refrain from doing it public so that you only know one place to check it and only one class has responsible on it, which is your base class.
Upvotes: 1
Reputation: 3605
You don't have to inject ILoggerService
twice. Change the _loggerService
from private
to protected
as following:
private ILoggerService _loggerService;
Or declare a getLoggerService
in the supper class and then call it to get the logger instance in subclass:
protected ILoggerService getLoggerService() {
return _loggerService;
}
Note that it makes no sense for other classes to get logger service from ViewModelBase
, so it's better to declare getLoggerService
as protected
.
Upvotes: 2