Pregunta

He estado usando el castillo de Windsor en mi proyecto anterior y me gustó mucho. Para mi proyecto actual Busco utilizar un contenedor IoC diferente. Castillo de Windsor no ha tenido nuevos lanzamientos desde el año 2007 y todavía no está en la versión 1.0 por lo que es difícil de justificar su uso en un entorno comercial.

Una de las cosas que me gustan de Castillo de Windsor es que se puede tener el contenedor llama a un método de inicialización de sus servicios después de todas las dependencias se han establecido, simplemente haciendo el servicio implementar IInitializable. He utilizado esta mucho. Esto hace que sea fácil de hacer la inyección de la propiedad en lugar de la inyección de constructor y que limpia de código y pruebas un poco.

He estado buscando en StructureMap, autofac, Unidad y Spring.Net como alternativas, pero de éstos sólo Spring.Net apoya algo similar, se llama automáticamente a un método Init(). Desafortunadamente Spring.Net no apoya realmente la forma en que quiero trabajar con un contenedor IoC (Inyecta basa en claves de cadena en lugar de declaraciones de interfaz y por lo tanto su apoyo autowiring se limita también)

¿Me he perdido una característica similar en los contenedores IoC que miraba? Es mi forma de trabajar con contenedores IoC mal de alguna manera? O hay otros contenedores IoC que hacen algo así como apoyar IInitializable o Init ()?

¿Fue útil?

Solución

Autofac puede hacerlo - lo llaman iniciable

Otros consejos

Con StructureMap, se podría hacer algo como esto:

ForRequestedType<IFoo>()
  .TheDefaultIsConcreteType<Foo>()
  .OnCreation(x => x.Init());

No es tan fácil como la implementación de una interfaz 'Inicialización' en su clase, pero también significa que no es necesario atar su implementación de la clase a su elección de contenedor DI heredando de una interfaz específica contenedor de DI (aunque' no estoy seguro de cuánto de un tema que está en la realidad).

Creo que la inyección de constructor es mucho más comúnmente utilizado en este momento, y la inyección propiedad es ampliamente visto como un mensaje para los casos en que no es factible para obtener el DI de contenedores para llevar a cabo la construcción de objetos para usted (por ejemplo, formularios web ASP.NET) . Podría estar equivocado allí, sin embargo, eso es sólo mi opinión sobre el tema!

¿De verdad cree que la inyección propiedad "limpia de código y pruebas un poco"? Eso es interesante porque en cierto modo me creo lo contrario - Creo que la inyección de constructor es 'limpia', y supongo que podría ser simplemente porque así es como normalmente lo hago así que eso es lo que yo estoy acostumbrado. :)

Castillo no pudo haber tenido cualquier liberación en algún momento, pero sigue siendo desarrollado activamente. Sigue las ofertas (bastante estable) construye aquí .

También va a haber una versión oficial v2.0 bastante pronto. Por qué no usar lo que ya sabe, si usted sabe que es bueno?

LinFu.IOC lo tiene - se llama IInitialize. Lo puedes encontrar aquí: github.com/philiplaureano/LinFu

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