Estoy tratando de decidir si tiene sentido realizar el esfuerzo adicional para encapsular mi contenedor IoC. La experiencia me dice que debo poner una capa de encapsulación entre mis aplicaciones y cualquier componente de terceros. Simplemente no sé si esto está bordeando excesivamente.¿Debo encapsular mi contenedor IoC?
Puedo pensar en situaciones en las que podría querer cambiar contenedores. Por ejemplo, mi contenedor actual deja de mantenerse, o se comprueba que un contenedor diferente es más liviano/funcional y se adapta mejor a mis necesidades. Si esto sucede, entonces posiblemente tendré que volver a cablear mucho para hacerlo.
Para ser claros, estoy considerando encapsular el registro y resolución de tipos. Creo que es una obviedad encapsular la resolución. Espero que sea una práctica común tener una clase auxiliar/utilitaria delegando en el contenedor.
EDIT:
La suposición es que prefiero alambre de seguridad de mis tipos de programación para el tipo-seguridad, en tiempo de compilación de cheques y refactorability. Es este código y su dependencia del contenedor del que estoy tratando de protegerme.
También he estado usando un contenedor IoC para varios otros proyectos que comparten muchas de las mismas relaciones, pero el contenedor es un dolor para trabajar, así que quiero un cambio. Pero, un cambio significa que pierdo la reutilización del código de registro. Por lo tanto, ¿por qué estoy contemplando la encapsulación? No es una carga enorme, pero a la que me gustaría mitigar.
Busco a:
- minimizar el impacto del cambio en contenedores/recipientes versiones de
- proporcionar un cierto nivel de consistencia de registro de tipo a través de proyectos que pueden utilizar diferentes contenedores
- proporcionar la interfaz métodos que tienen sentido para mí (RegisterSingleton < T, T > en lugar de RegisterType < T, T > (SomeLifetimeProvider) - usando Unity como ejemplo).
- Aumente el contenedor a medida que cambien los requisitos de condiciones/escalabilidad, p. agregando mejor almacenamiento en caché, registro, etc. durante la resolución/registro.
- Proporcionar mi propio modelo para registrar las asignaciones de tipos.
- Digamos que quiero crear una gran cantidad de objetos RegistrationHandler en un ensamblado/paquete y así puedo separar fácilmente las responsabilidades de registro en múltiples clases y retirar estos manejadores automáticamente sin cambiar el código en ningún otro lado.
Soy consciente de que es un poco subjetivo, por lo ventajas/desventajas podrían ser útiles
Gracias!
Se ha realizado. (Para .NET, al menos.) [Biblioteca de Local Service Service] (http://www.codeplex.com/CommonServiceLocator) En cualquier caso, estoy de acuerdo con el Sr. Knesek. Por lo general, solo necesita dependencias en su contenedor en su clase de nivel superior. – TrueWill
Eso parece un poco exagerado por lo que estoy tratando de lograr. Solo quiero minimizar el impacto del cambio si elijo cambiar los contenedores (en mi proyecto actual o en proyectos futuros). No quiero presentar otra biblioteca de terceros para lograr esto. –
Directed substaintly uin http://davybrion.com/blog/2009/11/integrating-your-ioc-container-with-agatha/ –