CastleWindsor также заполняет поля класса - PullRequest
2 голосов
/ 03 августа 2009

Я новичок в замке Виндзор; и вроде как познакомился с книгой Apress Pro Mvc. В проекте, над которым я работаю; Я использую фабрику контроллера Castlewindsor вместо фабрики контроллера MVC; так что я могу иметь параметризованные конструкторы, и я могу вводить зависимости. Есть ли способ сообщить фабрике windsorcontroller, чтобы она вводила значения в свойства класса контроллера, не проходя через конструктор? Причина, по которой я хочу это сделать, заключается в том, что у меня есть зависимость Logging; Зависимость от Emailler; Зависимость базы данных; Тема Двигатель dEpendency; и я не хочу использовать этот параметр многих параметров в конструкторе.

Ответы [ 2 ]

2 голосов
/ 03 августа 2009

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

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

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

1 голос
/ 03 августа 2009

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

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

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

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

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

...