¿Qué es el Castillo de Windsor y por qué debería importarme?


Soy un desarrollador de Windows desde hace mucho tiempo, después de haber cortado mis dientes en win32 y principios de COM. He estado trabajando con. Net desde 2001, así que soy bastante fluido en C# y el CLR. Nunca había oído hablar del Castillo Windsor hasta que empecé a participar en Stack Overflow. He leído la guía de Castle Windsor "Getting Started", pero no está haciendo clic.

Enséñale a este viejo perro nuevos trucos, y dime por qué debería integrar Castle Windsor en mis aplicaciones empresariales.

Author: Matt Hinze, 2008-09-24

4 answers

Castle Windsor es una herramienta de inversión de control. Hay otros como él.

Puede darte objetos con dependencias pre-construidas y pre-cableadas justo ahí. Un gráfico de objetos completo creado a través de reflexión y configuración en lugar del operador "nuevo".

Comienza aquí: http://tech.groups.yahoo.com/group/altdotnet/message/10434


Imagine que tiene una clase de envío de correo electrónico. EmailSender. 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 APRETADO que es difícil de cambiar. (este es un pequeño ejemplo artificial después de todo)

¿Y si, en lugar de poner a este chico malo dentro de WorkflowStepper, lo pasaras al constructor?

Entonces quien lo llamó tuvo que renovar el EmailSender.

new WorkflowStepper(emailSender).Step()

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

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

Imagine no preocuparse por los detalles de EmailSender cuando está escribiendo WorkflowStepper o AlertRegistry

Solo preocúpate 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 rellenadas automáticamente donde las necesite.

No hay new

Simplemente sucede - porque sabe qué necesita qué.

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

 331
Author: Matt Hinze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-18 17:10:49

Creo que el CoI es un peldaño en la dirección correcta en el camino hacia una mayor productividad y disfrute del equipo de desarrollo (incluyendo PM, BA y BOs). Ayuda a establecer una separación de preocupaciones entre los desarrolladores y para las pruebas. Da tranquilidad a la hora de diseñar, lo que permite flexibilidad ya que los marcos pueden entrar y salir.

La mejor manera de lograr el objetivo que CoI (CW o Ninject etc..) toma una puñalada en es eliminar la política #1 y # 2 eliminar la necesidad de desarrolladores para poner en la fachada de la falsa comprensión al desarrollar. ¿Estas dos soluciones no parecen estar relacionadas con el CoI? Son:)

 3
Author: Mike Socha III,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-18 18:46:09

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 dependencias en. Net " https://www.manning.com/books/dependency-injection-in-dot-net

 3
Author: IUnknown,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-11 13:00:28

Castle Windsor es Dependency Injection container. Significa que con la ayuda de esto puede inyectar sus dependencias y usarlas sin crearlas con la ayuda de una nueva palabra clave. por ejemplo, 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 castle Windsor.

Link.

Espero que te ayude.

 1
Author: Rakesh Burbure,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 09:48:15