asp.net-mvc fluent-nhibernate dependency-injection inversion-of-control

ASP.NET MVC+con fluidez nNibernate, ¿qué herramienta de IoC?



asp.net-mvc fluent-nhibernate (5)

Estoy trabajando en un proyecto ASP.NET MVC donde hemos decidido utilizar Fluent nHibernate para el acceso a datos. Para habilitar el acoplamiento flojo vamos a un patrón IoC / DI. Mi pregunta es qué herramienta de IoC hay que buscar. He tratado de encontrar las diferencias entre windsor, ninject, spring, structuremap y unity, pero es difícil ver los beneficios que cada uno tiene para ofrecer. ¿Cuál es tu experiencia?



Uso StructureMap y es muy fácil de usar. Personalmente, no me gusta configurar el uso de xml y StructureMap hace que sea fácil configurar el uso del código. También es muy fácil cambiar de perfil si necesita cambiar las implementaciones.


Uso Windsor y no tengo nada de qué quejarme. Fácil de usar, extensible cuando lo necesite y mucha información si se queda atascado. Pero no creo que importe tanto qué contenedor elijas. Todos los que mencionas tienen las características comunes y también hay adaptadores para mvc disponibles en el proyecto mvccontrib. Un cambio a otro contenedor no debería ser difícil si envuelve el contenedor en una clase propia, lo cual es una buena práctica de todos modos.


He estado usando Windsor y me encanta. Hay una instalación incorporada para usar NHibernate que permite una configuración simple de registro y conexiones, etc.

Si planea usar FluentNhibernate, debe informar a la instalación de Windsor qué ensamblado tiene ConfigurationBuilder. Mike Hadlow tiene un excelente escrito sobre esto y muchos otros sobre Windsor y NHibernate: http://mikehadlow.blogspot.com/2009/01/integrating-fluent-nhibernate-and.html


Utilizo Munq, que es liviano y rápido, y es una forma sencilla de agregar un Contenedor DI a los proyectos de MVC3 a través de Nuget. Hasta ahora no he encontrado ninguna necesidad de pasar a un marco diferente: Munq ha sido muy adecuado.

PM> install-package Munq.MVC3

Esto agrega App_Start/MunqMvc3Startup.cs al proyecto, y aquí es donde deben registrarse las dependencias.