CastleWindsor также заполняет поля класса

Я новичок в использовании Castle Windsor; и как бы познакомился с ним с книгой Apress Pro Mvc. В проекте, над которым я работаю; Я использую фабрику контроллеров Castlewindsor вместо фабрики контроллеров mvc; поэтому у меня могут быть параметризованные конструкторы, и я могу вводить зависимости. Есть ли способ сообщить фабрике WindsorController ввести значения в свойства класса контроллера без использования конструктора? Причина, по которой я хочу это сделать, заключается в том, что у меня есть зависимость от ведения журнала; Зависимость от электронной почты; Зависимость от базы данных; Зависимость от движка темы; и я не хочу использовать этот параметр с множеством параметров в конструкторе.


person user149383    schedule 02.08.2009    source источник


Ответы (2)


По умолчанию, когда Windsor разрешает реализацию службы, он заполняет все свойства общедоступными сеттерами, которые могут удовлетворить.

Однако обратите внимание, что иногда имеет смысл помещать разрешение зависимостей в конструктор, потому что он гарантирует, что любой экземпляр всегда будет в допустимом состоянии. Рассмотрим сценарий модульного тестирования, в котором человек, пишущий тест, сходит с ума от необходимости знать, какие зависимости должны быть предоставлены. Когда все зависимости попадут в c'tor, у тестировщика не будет другого выбора, кроме как предоставить тестируемому экземпляру все необходимые зависимости (в виде заглушек или макетов).

В любом случае, что касается вашего вопроса, Windsor поддерживает внедрение свойств C'tor and по умолчанию.

person Ken Egozi    schedule 02.08.2009
comment
и если он заполняет не свойства, а конструктор; куда мне смотреть? - person user149383; 03.08.2009
comment
Я бы сказал - опубликуйте свой код в группе пользователей Windsor. Вы, вероятно, получите быструю помощь в кратчайшие сроки - person Ken Egozi; 06.08.2009

Castle Windsor автоматически заполнит любые свойства общедоступными сеттерами, которые он знает, как заполнять.

Это означает, что если у вас есть класс

public MyClass {
  public SomeDependency {get; set;}
}

Пока контейнер настроен на то, чтобы знать, как разрешать SomeDependency, он будет пытаться разрешить и внедрить его.

Иногда я находил это поведение по умолчанию хлопотным. Это средство даст вам более точный контроль над процессом.

person George Mauer    schedule 03.08.2009