que tienen una aplicación de servicio de .NET de 3 niveles, que sigue el enfoque estándar:Dependency Injection en una aplicación n-tier?
Frontend -> Object Model/Business Logic -> Data Access
Estoy tratando de aprender acerca de la inyección de dependencia a lo largo del camino, y hasta ahora lo he encontrado muy bien (usando Autofac) . Cada uno de los 3 niveles necesita crear una variedad de objetos, a veces con configuración extra/etc. Parece que el contenedor DI debería ser lo ideal para resolver esto, pero estoy teniendo algunos problemas para ver dónde debería vivir en relación con el resto del sistema.
Actualmente tengo una clase en la interfaz que configura el contenedor DI. Básicamente es un gran grupo de código que dice container.Register<SomeType>()
y así sucesivamente.
El problema es que está configurando el contenedor para los 3 niveles y, por lo tanto, debe tener un conocimiento bastante invasivo de la capa de acceso a los datos. Tener un código en mi frontend con tal conocimiento hace saltar las campanas de alarma en mi cabeza, ya que el punto de separar la aplicación en niveles es evitar esta situación exacta.
Esto también empeora por el hecho de que mi capa de acceso a datos no es solo un servidor SQL que es un tonto cubo de bits, sino que está compuesto por muchas interoperaciones COM complejas y llamadas P/Invoke, por lo que tiene un gran impacto la configuración DI
He pensado en dividirlo, quizás tener un contenedor por nivel o tener una clase de "Configuración" en cada nivel que hable con el contenedor DI global para registrar sus propios bits, pero no estoy seguro si eso causa más problemas de los que resuelve ...
Realmente agradecería que alguien pudiera compartir sus experiencias en el uso de DI con aplicaciones de varios niveles.
Gracias, Orion.
¿Tiene algo que se asemeje a una capa de servicio? Para que su interfaz interactúe con él antes que Business Objects. – BuddyJoe
No estoy seguro de seguir lo que quiere decir con "capa de servicio" ... "servicio" es un término genérico tan abusado en estos días :-( –