Что такое замок Виндзор, и какое мне дело?

Я давний разработчик Windows, отрезав зубы на win32 и early COM. Я работаю с .Net с 2001 года, поэтому я довольно свободно владею C# и CLR. Я никогда не слышал о замке Виндзор, пока не начал участвовать в переполнении стека. Я прочитал руководство Castle Windsor "начало работы", но оно не щелкает.

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

4 ответов


замок Виндзор является инверсией инструмента управления. Есть и другие такие же.

он может дать вам объекты с предварительно построенными и предварительно проводными зависимостями прямо там. весь граф объектов, созданный с помощью отражения и конфигурации, а не оператора "new".

начните здесь:http://tech.groups.yahoo.com/group/altdotnet/message/10434


представьте, что у вас есть класс отправки электронной почты. EmailSender. Представьте, что у вас есть другой класс WorkflowStepper. Внутри WorkflowStepper вам нужно использовать EmailSender.

вы всегда можете сказать new EmailSender().Send(emailMessage);

но что-использование new - создает плотное соединение, которое трудно изменить. (в конце концов, это крошечный надуманный пример)

так что, если вместо того, чтобы создать этого плохого мальчика внутри WorkflowStepper, вы просто передали его в конструктор?

Итак, кто бы ни позвонил, он должен был обновить EmailSender.

new WorkflowStepper(emailSender).Step()

представьте, что у вас есть сотни этих маленьких классов, которые имеют только одну ответственность (google SRP).. и вы используете несколько из них в WorkflowStepper:

new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()

представьте себе, не беспокоясь о деталях EmailSender когда вы пишите WorkflowStepper или AlertRegistry

вы просто беспокоитесь о беспокойстве, с которым вы работаете.

представьте себе весь этот график (дерево) объектов и зависимостей подключается во время выполнения, так что когда вы это делаете:

WorkflowStepper stepper = Container.Get<WorkflowStepper>();

вы получите реальную сделку WorkflowStepper со всеми зависимостями, автоматически заполненными там, где они вам нужны.

нет new

это просто происходит - потому что он знает, что к чему.

и вы можете написать меньше дефектов с лучше разработанным, сухим кодом проверяемым и повторяемым способом.


Я думаю, что МОК-это ступенька в правильном направлении на пути к большей производительности и наслаждению командой разработчиков (включая PM, BA an BOs). Это помогает создать разделение между разработчиками и для тестирования. Оно дает душевное спокойствие когда architecting которое учитывает гибкость по мере того как рамки могут прийти внутри и вне.

лучший способ достичь цели, которую IoC (CW или Ninject и т. д..) принимает удар на том, чтобы устранить политику #1 и # 2 удалить нужно, чтобы разработчики при разработке ставили на фасад ложное понимание. Не связаны ли эти два решения с МОК? Они :)


Марк Seemann написал и отличную книгу о DI (инъекции зависимостей), которая является подмножеством IOC. Он также сравнивает ряд контейнеров. Я не могу рекомендовать эту книгу достаточно. Название книги: "инъекция зависимостей в .Net"https://www.manning.com/books/dependency-injection-in-dot-net


замок Виндзор Dependency Injection container. Это означает, с помощью этого вы можете вводить зависимости и использовать их, не создавая их с помощью ключевого слова new. например, подумайте, что вы написали репозиторий или услугу, и вы хотите использовать его во многих местах, вам нужно сначала зарегистрировать свой сервис / репозиторий, и вы можете начать использовать его после инъекции в нужное место. Вы можете взглянуть на ниже учебник, который я следовал, чтобы узнать замок виндзор.

ссылке.

надеюсь, это поможет вам.