Hace poco pregunté acerca de cómo hacer DI correctamente y obtuve algunos enlaces a publicaciones en blogs sobre el tema. Creo que entiendo mejor ahora: separar la construcción de objetos de la lógica, poniéndolo en fábricas. Pero todos los ejemplos son para sitios web como, por ejemplo, para hacer todo el cableado al inicio. Llame a una fábrica grande que new
s todo y pasa en todas las dependencias.¿Cuándo y dónde llamar a las fábricas en tiempo de ejecución?
Pero, ¿qué pasa si no quiero crear una instancia de todo por adelantado? Tengo un objeto que contiene una lista de otros objetos a los que puede delegar, pero son caros y se usan uno a la vez, por lo que los construyo cuando sea necesario y los dejo compilar cuando termine. No quiero poner new B()
dentro de la lógica de A
porque prefiero usar DI, pero ¿cómo? ¿Puede A
llamar a la fábrica? Eso no parece mucho mejor, a menos que la fábrica mantenga el estado, incluidas las dependencias actuales. Simplemente no quiero pasar la lista completa de B
s en A
cuando está construida, ya que sería un desperdicio. Si lo desea, B
no necesariamente tienen estar dentro A
, a pesar de que tiene un sentido lógico (A
es un nivel de juego, B
es una sola pantalla), pero en cualquier caso la lógica de A
dicta cuando se crea B
.
Entonces, ¿quién llama a la fábrica para obtener B
, y cuándo?
aclaración: No estoy utilizando el marco para DI. Me pregunto si el término DI implica eso?
Muy buena pregunta. Me he sentido confundido por este problema también. Además, a veces quiero múltiples instancias de algo (¡y un número arbitrario de ellas!) Y he estado muy confundido sobre cómo se supone que funciona. Con Ninject lo acabo de chupar e inyecté 'IKernel' pero me dieron a entender que está mal visto. (aunque en mi experiencia, muy poderoso y aún no me arrepiento - y no, ni remotamente estoy interesado en "intercambiar" mi marco DI, por lo que el beneficio es discutible para mí) –
Sólo es desaprobado por los desarrolladores que tener cierta comprensión religiosa de los patrones. Si bien no me volvería loco cuando todo el mundo sabe sobre IKernel, o como se llame en tu estilo de marco DI, a veces es la mejor manera de hacerlo. He hecho esto también, y nada ha explotado en mí. – Andy