2009-05-20 14 views

Respuesta

4

En general, diría que no; la naturaleza de la inyección de dependencia significa que el objeto inyectado no sabe mucho sobre el ciclo de vida de lo que se inyectó; hasta cierto punto, esta es la definición de inyección. Como tal, no creo que el objeto inyectado deba eliminar lo que fue inyectado; el código de inyección debe asumir la responsabilidad de conocer el ciclo de vida completo de todos los objetos que está inyectando, y debe poder disponer de ellos adecuadamente cuando se completen todas las operaciones en ellos, y no antes.

1

Creo que realmente terminaría siendo subjetivo.

Sería todas se reducen a, ¿Quién debe controlar el tiempo de vida del objeto A?

decir con objeto de instancia C y D también tienen el objeto A inyectada en ellos, en caso de que usted no quiere que el objeto B disponer del objeto A prematuramente.

Sin embargo, en algunos casos, cuando se conoce el tiempo de vida del objeto A debe terminar con B, es totalmente apropiado para que el objeto B Eliminar el objeto A.

5

Si se refiere al patrón dependency injection, me creo que depende del conocimiento en el Objeto B sobre la implementación del Objeto A. La razón para hacer una inyección de dependencia de este tipo es porque usted no sabe de antemano cómo se implementará el Objeto A y si requiere IDisposable. Lo único que sabes es la interfaz.

La adición de este comportamiento resultaría en acoplamiento apretado entre las dos clases, la OMI.

2

(edit: al responder, no me quedó claro que la pregunta era sobre IoC/DI; lo dejo aquí para referencia, pero mire primero la respuesta aceptada).

Si por "inyectar" Quiere decir que B asume la propiedad de A, entonces sí; ejemplo de esto sería cosas como StreamReader.

Si sólo se utiliza A por un tiempo (pero A sigue viviendo más allá de B) entonces no.

Algunas API permiten especificar (en el constructor) si la propiedad se debe asumir (es decir, si se debe limpiar el objeto inyectado). Un ejemplo de esto sería GZipStream.

1

Mi 2p sería argumentar que A no debe desecharse cuando se dispone B. La idea de la inyección de dependencia es que no tiene que preocuparse por el comportamiento y el ciclo de vida de los objetos que está recibiendo, simplemente se los entregó.

Por otra parte usted quiere asegurarse el objeto se limpia tan pronto como lo es ya no es necesaria. ¿Tal vez crear un sistema de mini eventos para que pueda notificar que necesita ser eliminado? Supongo que depende del contexto realmente.

+0

En ese caso, necesitaría algún tipo de recuento de referencias para que el objeto A no se elimine antes de que algunas clases lo utilicen. –

Cuestiones relacionadas