2009-08-02 2 views
2

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

ответ

2

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

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

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

+0

и если он не заполняет свойства, а конструктор; где я должен смотреть? – user149383

+0

Я бы сказал - разместите свой код в группе пользователей Windsor. Вы, вероятно, быстро получите помощь –

1

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

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

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

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

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

Смежные вопросы