Pregunta

Soy un desarrollador de Windows desde hace mucho tiempo y me he iniciado en win32 y los primeros COM.He estado trabajando con .Net desde 2001, por lo que hablo con bastante fluidez C# y CLR.Nunca había oído hablar de Castle Windsor hasta que comencé a participar en Stack Overflow.He leído la guía "Introducción" de Castle Windsor, pero no funciona.

Enséñele nuevos trucos a este viejo perro y dígame por qué debería integrar Castle Windsor en mis aplicaciones empresariales.

¿Fue útil?

Solución

Castle Windsor es una herramienta de inversión de control.Hay otros similares.

Puede brindarle objetos con dependencias prediseñadas y precableadas allí mismo. Un gráfico de objetos completo creado mediante reflexión y configuración en lugar del operador "nuevo".

Empieza aqui: http://tech.groups.yahoo.com/group/altdotnet/message/10434


Imagina que tienes una clase de envío de correo electrónico.Remitente de correo electrónico.Imagina que tienes otra clase WorkflowStepper.Dentro de WorkflowStepper necesitas usar EmailSender.

Siempre podrías decir new EmailSender().Send(emailMessage);

pero eso - el uso de new - crea un ACOPLAMIENTO ESTRECHO que es difícil de cambiar.(después de todo, este es un pequeño ejemplo artificial)

Entonces, ¿qué pasa si, en lugar de actualizar a este chico malo dentro de WorkflowStepper, simplemente lo pasas al constructor?

Entonces, quien lo llamó tuvo que actualizar EmailSender.

new WorkflowStepper(emailSender).Step()

Imagina que tienes cientos de estas pequeñas clases que solo tienen una responsabilidad (google SRP).y usas algunos de ellos en WorkflowStepper:

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

Imagínese no preocuparse por los detalles de EmailSender cuando estas escribiendo WorkflowStepper o AlertRegistry

Sólo 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 TIEMPO DE EJECUCIÓN, de modo que cuando haga esto:

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

obtienes un trato real WorkflowStepper con todas las dependencias completadas automáticamente donde las necesite.

No hay new

Es solo sucede - porque sabe qué necesita qué.

Y puede escribir menos defectos con código DRY mejor diseñado de una manera comprobable y repetible.

Otros consejos

Creo que IoC es un trampolín en la dirección correcta en el camino hacia una mayor productividad y disfrute del equipo de desarrollo (incluidos PM, BA y BO).Ayuda a establecer una separación de preocupaciones entre los desarrolladores y las pruebas.Proporciona tranquilidad a la hora de diseñar, lo que permite flexibilidad a medida que los marcos pueden entrar y salir.

La mejor manera de lograr el objetivo que intenta IoC (CW o Ninject, etc.) es eliminar las políticas n.° 1 y n.° 2, eliminar la necesidad de que los desarrolladores pongan una fachada de comprensión falsa al desarrollar.¿Estas dos soluciones no parecen relacionadas con IoC?Ellos son :)

Mark Seemann escribió un excelente libro sobre DI (Inyección de Dependencia), que es un subconjunto del COI.También compara varios contenedores.No puedo recomendar este libro lo suficiente.El nombre del libro es:"Inyección de dependencia en .Net" https://www.manning.com/books/dependency-injection-in-dot-net

El castillo de Windsor es Dependency Injection container. Significa que con la ayuda de esto puedes inyectar tus dependencias y usarlas sin crearlas con la ayuda de una nueva palabra clave.p.ej.Considere que ha escrito un repositorio o un servicio y desea usarlo en muchos lugares, primero debe registrar su servicio/repositorio y puede comenzar a usarlo después de inyectarlo en el lugar requerido.Puedes echar un vistazo al siguiente tutorial que seguí para aprender sobre Castle Windsor.

enlace.

Espero que te ayude.

En pocas palabras.Imagine que tiene alguna clase oculta en su código que necesita algunos valores de configuración simples para hacer su trabajo.Eso significa que todo lo que crea una instancia de esa clase necesita obtener esas dependencias, por lo que generalmente terminas teniendo que refactorizar un montón de clases en el camino para simplemente pasar un poco de configuración hasta donde se crea la instancia.

Entonces, o se modifican innecesariamente muchas clases, se agrupan los valores de configuración en una gran clase de configuración, lo cual también es malo...¡O peor aún, vaya al Localizador de servicios!

IoC permite que su clase obtenga todas sus dependencias sin esa molestia y también administra la vida útil de las instancias de manera más explícita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top