Внедрение зависимостей свойств, используемое в конструкторе с использованием Unity

Хорошо, у меня есть зависимое свойство, определенное в базовом классе, и я пытаюсь использовать его внутри конструктора его производного класса, но это не работает, свойство отображается как нулевое. 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>();
5
задан Adolfo Perez 20 June 2012 в 18:40
поделиться