Castle Windsor - это инверсионный инструмент управления. Есть и другие, как это.
Он может дать вам объекты с предварительно построенными и предварительно смонтированными зависимостями прямо там. Весь граф объектов, созданный с помощью отражения и конфигурации, а не оператора "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
Вы просто беспокоитесь о беспокойстве, с которым работаете.
Представьте себе, что весь этот график (дерево) объектов и зависимостей подключен в RUN TIME, поэтому, когда вы делаете это:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
вы получите реальную сделку WorkflowStepper
со всеми зависимостями, автоматически заполненными там, где они вам нужны.
Нет new
Это просто происходит - потому что он знает, что для чего нужно.
И вы можете написать меньше дефектов с помощью лучшего разработанного, СУХОГО кода тестируемым и воспроизводимым способом.