Castle Windsor es una herramienta de inversión de control. Hay otros como este.
Puede darle objetos con dependencias preconstruidas y cableadas allí mismo. Un gráfico de objeto completo creado a través de la reflexión y la configuración en lugar del operador "nuevo".
Comience aquí: http://tech.groups.yahoo.com/group/altdotnet/message/10434
Imagina que tienes una clase de envío de correo electrónico. EmailSender. Imagine que tiene otra clase WorkflowStepper. Dentro de WorkflowStepper necesita usar EmailSender.
Siempre puedes decir new EmailSender().Send(emailMessage);
pero eso, el uso de new
, crea un ACOPLAMIENTO APRETADO que es difícil de cambiar. (Este es un pequeño ejemplo artificial después de todo)
Entonces, ¿qué pasa si, en lugar de renovar a este chico malo dentro de WorkflowStepper, lo pasa al constructor?
Entonces, quien lo llamó tuvo que actualizar el EmailSender.
new WorkflowStepper(emailSender).Step()
Imagine que tiene cientos de estas pequeñas clases que solo tienen una responsabilidad (google SRP) ... y usa algunas de ellas en WorkflowStepper:
new WorkflowStepper(emailSender, alertRegistry, databaseConnection).Step()
Imagine no preocuparse por los detalles de EmailSender
cuándo está escribiendo WorkflowStepper
oAlertRegistry
Simplemente te preocupas por la preocupación con la que estás trabajando.
Imagine que todo este gráfico (árbol) de objetos y dependencias se conecta en el TIEMPO DE EJECUCIÓN, de modo que cuando haga esto:
WorkflowStepper stepper = Container.Get<WorkflowStepper>();
obtienes un trato real WorkflowStepper
con todas las dependencias que se completan automáticamente donde las necesitas.
No hay new
Simplemente sucede , porque sabe lo que necesita qué.
Y puede escribir menos defectos con un código DRY mejor diseñado de forma comprobable y repetible.