Soy nuevo en este negocio de IoC y DI. Siento que entiendo el concepto si está pasando objetos que son de alcance global, pero no entiendo cómo funciona cuando necesita pasar alrededor de un objeto que tiene un estado lógico específico. Entonces, por ejemplo, si quisiera inyectar un objeto de persona en un objeto de comando de archivo de escritura, ¿cómo podría elegir dinámicamente el objeto de persona correcto? Por lo que he visto, podría construir el objeto por defecto, pero mi desconexión es que no usaría un objeto de persona predeterminado, tendría que ser dinámico. Supongo que el contenedor IoC puede simplemente mantener el estado del objeto para usted a medida que se pasa, pero luego eso supone que se trata de un solo objeto porque no habría seguridad de hilo, ¿verdad? Sé que me estoy perdiendo algo, (tal vez algo así como una clase de fábrica), pero necesito un poco más de información sobre cómo funcionaría.IoC Dependency Injection para objetos con estado (no global)
Respuesta
Bien, siempre puede inyectar un Abstract Factory en su consumidor y utilizarlo para crear objetos de ámbito local.
Esto a veces es necesario. Vea estos ejemplos:
- MVC, DI (dependency injection) and creating Model instance from Controller
- Is there a pattern for initializing objects created via a DI container
- Can't combine Factory/DI
Sin embargo, en general se tiende a no utilizar DI para las entidades, pero sobre todo para los Servicios. En cambio, las entidades se crean generalmente a través de algún tipo de repositorio.
Cuando construye un objeto de servicio (por ejemplo, WriteFileService
), inyecta en él lo que necesita internamente para completar su trabajo. Quizás necesite un objeto de sistema de archivos o algo.
El objeto Person
en su ejemplo se debe pasar al objeto de servicio como un parámetro para una llamada de método. p.ej. writeFileService.write(person)
Así que no inyectaría el WriteFileService en el objeto de entidad Entity ... así que en este caso, puedo ver cómo se puede usar la entidad sin la infraestructura DI. Aunque es probable que WriteFileService haya utilizado la infraestructura DI cuando se creó (según la necesidad de una clase inyectada que escriba en una salida específica, p.WriterA - escribe en la base de datos, WriterB - derechos a una consola, etc ...). – mytwocents
- 1. Dependency Injection para objetos que requieren parámetros
- 2. Lazy Dependency Injection
- 3. Dependency Injection
- 4. Webforms and Dependency Injection
- 5. Dependency Injection and Factories
- 6. IoC Dependency injection into Custom HTTP Module: ¿cómo? (ASP.NET)
- 7. Android and Dependency Injection
- 8. Cuándo utilizar Dependency Injection
- 9. MSTest TestMethod Dependency Injection
- 10. Custom ResourceProviderFactory Dependency Injection
- 11. Dependency Injection & using interfaces?
- 12. MVP dependency injection
- 13. Dependency injection container? ¿Qué hace?
- 14. Grails Dependency Injection fuera de los servicios?
- 15. Dependency Injection en .NET con ejemplos?
- 16. Dependency Injection como característica de idioma?
- 17. Uso de Reader Monad para Dependency Injection
- 18. Unity Dependency Injection para servicios de WCF
- 19. Symfony 2 Dependency Injection & autowiring
- 20. Dependency Injection en una aplicación n-tier?
- 21. Dependency Injection en Sharepoint 2010
- 22. Cómo evitar la locura del constructor de Dependency Injection?
- 23. Delphi Dependency Injection: Framework vs Delegating Constructor
- 24. Dependency Injection - ¿A quién pertenece la interfaz?
- 25. Guice dependency injection for entity beans?
- 26. Spring Dependency Injection and Plugin Jar
- 27. ¿Qué tan lejos llega Dependency Injection?
- 28. Inversion Of Control vs Dependency Injection con citas seleccionadas - ¿es correcto mi entendimiento?
- 29. MVC 3 Dependency Injection with Ninject 2.2 + Filtro de acción global
- 30. Estoy usando Dependency Injection: ¿qué tipos debo enlazar como singletons?
¿En general, las entidades no serían parte de la infraestructura de DI en absoluto? ¿Estoy complicando esto? – mytwocents
Correcto: las entidades y los objetos de valor tienden a vivir vidas separadas. En cierto sentido, todavía están gestionados de alguna manera por la infraestructura de DI (idealmente, todo lo es), pero de una manera muy indirecta. Por lo general, se leen y escriben en el almacenamiento permanente a través de repositorios o similares, y * esos * son servicios que forman parte de la infraestructura de DI. –
Ok, pensé que el director DI decía que el objeto Enitity persona debería estar disponible desde el contenedor IoC (a través de la configuración) ... – mytwocents