50

En una continuación de Krzysztof’s statement que Windsor hace mucho más que otras IoC, quería entender cómo estas IoC se comparan unas con otras y con los beneficios/instalaciones adicionales que brinda el castillo de Windsor.Comparando Castle Windsor, Unity y StructureMap

¿Hay alguna comparación? ¿Puede alguien ayudarme a entender las características adicionales que el castillo de Windsor ofrece frente a otros COI

+2

Sí, el libro de Mark Seemann "Dependency Injection in .NET" http://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/dp/1935182501/ref=sr_1_1?ie=UTF8&qid=1326500032&sr=8 -1 muestra un gráfico que compara varios contenedores de COI, y parece tener las "características más". Yo y otros desarrolladores que conozco simplemente no disfrutan de usarlo. No disfruto de VB.NET, mientras que algunos sí (y de ninguna manera estoy comparando Castle Windsor con VB.NET de ninguna manera ...) –

Respuesta

47

Ver here y here para una comparación técnica muy minuciosa de varios contenedores IoC, aunque algo anticuado por ahora (que 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 durante estos años, por lo que ahora son muy maduros. Los contenedores más nuevos, como Autofac, Unity, Ninject y SimpleInjector aprovechan esa experiencia previa para que no carezcan de esas características vitales.

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

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

Extensibilidad: Lots of extension points que puede utilizar para personalizar o anular prácticamente cualquier comportamiento predeterminado.

Integración: Windsor tiene lots of facilities (módulos) que permiten una fácil integración con otros marcos/bibliotecas. Otras integraciones incluyen ASP.NET MVC, MonoRail, Workflow Foundation, NServiceBus, MassTransit, Rhino Service Bus, Quartz.Net, SolrNet, SolrSharp, Windows Fax Services.

This series of articles 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 seleccionó uno de ellos y más tarde descubrió que le falta algo de integración, generalmente no es difícil codificarlo usted mismo.

En pocas palabras: No creo que se puede ir mal con cualquiera de los principales contenedores IoC, siempre y cuando la estructura de su código correctamente (por ejemplo, evitar el anti-patrón de servicio de localización).

+0

¿podría proporcionar un enlace a una referencia del localizador de servicios anti-patrón? Gracias – Ruben

+0

@Ruben: aparecen varios artículos en Google: http://www.google.com/search?hl=en&q=service+locator+anti-pattern –

+8

Sí, lo intenté. Espero que tengas un enlace específico en mente. Creo que esta es la mejor explicación: http://blog.ploeh.dk/2010/02/03/ServiceLocatorIsAnAntiPattern.aspx – Ruben

16

Para mí hay dos características de Windsor que no creo que la mayoría de los demás contenedores ofrezcan.

  • Capacidad para trabajar de manera independiente del contenedor - esto significa que su contenedor puede arrancar todo el código para usted y usted puede sacar el máximo provecho de sus capacidades ricas sin tener que hacer referencia a cualquiera de Castillo * asambleas dll en su.. ensambles no de infraestructura.Esto es gracias a características como Lazy Component Loaders, DynamicParameters y Typed Factory Facility, que no le impiden aprovechar las capacidades avanzadas del contenedor, evitan codificar manualmente la capa de integración o utilizar Service Locator, que como @ploeh escribió es un patrón anti.

  • ecosistema de extensibilidad/extensiones muy rico que puede darle capacidades realmente potentes y reducir en gran medida la cantidad de código de plomería que tiene que escribir. Puede que esto no suene poderoso, pero lo hará cuando lo aproveches una vez que aproveches elementos como WCF Facility en un proyecto y luego en otro no podrás usarlo. La parte de extensibilidad significa que aunque Windsor no intenta (este es su objetivo de diseño) resolver todos los problemas que pueda tener de manera inmediata, es muy extensible, lo que significa que puede ajustar y girar para hacer casi cualquier cosa que pueda necesitar .

Aparte de eso, simplemente resulta que como la forma de Windsor funciona prácticamente como esperaba (contrary to some other containers) y cómo resuelve las pequeñas cosas . Por ejemplo, crear servicios decorados es muy simple. También me gusta mucho la API de registro fluido, que funciona muy bien para ambos escenarios simples, y no se torce demasiado y se complica cuando se quiere hacer algo avanzado. Además de muchas otras cosas pequeñas, aunque aquí las cosas pueden ser bastante subjetivas.

+0

¿Puede publicar un enlace sobre cómo el primer punto funciona? ¿Es algo así como el localizador de servicio común? –

+0

http://google.com es tu amigo. Mejoraré los documentos sobre esto una vez que tenga algo de tiempo. También hay blogposts en mi blog sobre cada una de estas características. –

Cuestiones relacionadas