Comparación de Castle Windsor, Unity y StructureMap


En un seguimiento de la declaración de Krzysztof de que Windsor hace mucho más que otros CoI, quería entender cómo estos CoI se comparan entre sí y los beneficios/instalaciones adicionales que proporciona castle Windsor.

¿Hay alguna comparación? ¿Puede alguien ayudarme a entender las características adicionales que Castle Windsor proporciona sobre otros CoI

Author: Community, 2010-02-07

2 answers

Ver aquíy aquí para una comparación técnica bastante completa de varios contenedores IoC, aunque algo anticuados por ahora (son de antes de Windsor 2.0)

Sin embargo, no creo que realmente haya características vitales que Windsor ofrece y otros contenedores no. Windsor, StructureMap, Spring.NET han existido durante varios años y se han utilizado en muchos proyectos a lo largo de estos años, por lo que son muy maduros ahora. Contenedores más nuevos, como Autofac, Unidad, Ninject y SimpleInjector se basan en esa experiencia previa para que tampoco les falten esas características vitales.

Ahora la parte más subjetiva de la respuesta: Me gusta pensar que Windsor tiene una buena mezcla de usabilidad, extensibilidad y módulos de integración.

Usabilidad: por ejemplo, puede usar XML y / o registro de código (también tiene una API fluida como la mayoría de los contenedores hoy).

Extensibilidad: Muchos puntos de extensión que puede usar para personalizar o anular prácticamente cualquier comportamiento predeterminado.

Integración : Windsor tiene muchas facilidades (módulos) que permiten una fácil integración con otros frameworks/bibliotecas. Otras integraciones incluyen ASP.NET MVC, Monorriel, Flujo de trabajo de la Fundación, NServiceBus, MassTransit, Rhino Servicio de Autobús, Quartz.Net, SolrNet, SolrSharp, Windows Fax.

Esta serie de artículos cubre muchas sutilezas y puntos de extensión de Windsor.

Tenga en cuenta que estoy no diciendo que otros contenedores no ofrecen cosas similares! Incluso si elegiste uno de ellos y luego descubriste que le falta algo de integración, generalmente no es difícil codificarlo tú mismo.

Conclusión : No creo que puedas equivocarte con cualquier de los principales contenedores IoC, siempre y cuando estructure su código correctamente (por ejemplo, evite el anti-patrón del localizador de servicios).

 48
Author: Mauricio Scheffer,
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-06-09 12:58:27

Para mí hay dos características asesinas de Windsor que no creo que la mayoría de los otros contenedores proporcionan.

  • Capacidad de trabajar de una manera agnóstica de contenedor: esto significa que su contenedor puede arrancar todo el código por usted y puede aprovechar al máximo sus ricas capacidades sin hacer referencia a Castle.*.ensamblados dll en sus ensamblados que no son de infraestructura. Esto es gracias a características tales como Cargadores de componentes perezosos, DynamicParameters e Instalaciones de fábrica Mecanografiadas, que no le restrinja la posibilidad de aprovechar las capacidades avanzadas del contenedor, al tiempo que evita la codificación manual de la capa de integración o el uso del Localizador de servicios, que como escribió @ploeh es un patrón anti.

  • Ecosistema de extensibilidad / extensiones muy rico que puede darle capacidades realmente poderosas y reducir en gran medida la cantidad de código de plomería que tiene que escribir. Esto puede no sonar poderoso, pero lo apreciará una vez que aproveche cosas como las instalaciones de WCF en un proyecto, y luego en otro no podrás usarlo. La parte de extensibilidad significa que si bien Windsor no intenta (este es su objetivo de diseño) resolver todos los problemas que pueda tener fuera de la caja, es muy extensible, lo que significa que puede retocarlo y girarlo para hacer casi cualquier cosa que pueda necesitar.

Aparte de eso, resulta que me gusta la forma en que Windsor funciona más o menos como se esperaba ( contrario a algunos otros contenedores ) y cómo resuelve el poco things. Por ejemplo, crear servicios decorados es muy simple. También me gusta mucho su API de registro fluido, que funciona muy bien para ambos escenarios simples, y no se vuelve demasiado retorcido y complicado cuando se quiere hacer algo avanzado. Además de muchas otras cosas pequeñas, aunque aquí las cosas pueden ser bastante subjetivas.

 17
Author: Krzysztof Kozmic,
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
2011-01-19 01:29:08