Хорошо, у меня есть зависимое свойство, определенное в базовом классе, и я пытаюсь использовать его внутри конструктора его производного класса, но это не работает, свойство отображается как нулевое. Unity разрешает зависимое свойство ПОСЛЕ разрешения экземпляра с container.Resolve ();
Один из вариантов, который у меня есть, — это добавить параметр IUnityContainer в мой конструктор класса MyViewModel и установить для свойства ILogger что-то вроде:
public MyViewModel(IUnityContainer container)
{
Logger = container.Resolve<ILogger>();
}
РЕДАКТИРОВАТЬ:Другое предложение от @Wiktor _Zychla заключается в том, чтобы передать введенный параметр конструктора -как:
public MyViewModel(ILogger _logger)
{
Logger = _logger;
}
Кажется, это работает нормально, но мне придется сделать это для всех моих производных ViewModels..
Но тогда я не использую аннотированную зависимость ILogger в своем базовом классе. См. примеры моих занятий ниже. Вопрос :в том, какие у меня есть альтернативы или что я делаю неправильно?
Спасибо!
У меня есть такой базовый класс ViewModel:
public abstract class ViewModelBase
{
[Dependency]
public ILogger Logger { get; set; }
....
}
Затем у меня есть класс, выводящий:
public class MyViewModel : ViewModelBase
{
public MyViewModel()
{
//I want to use my dependent property in constructor, but doesn't
Logger.Error("PRINT AN ERROR");
}
}
И в моей точке входа в приложение я регистрирую свой ILogger как синглтон и свой класс MyViewModel:
container.RegisterType<ILogger, MyAppLogger>(new ContainerControlledLifetimeManager());
container.RegisterType<MyViewModel>();