(Esta pregunta no se basa en un marco específico COI, por lo que las interfaces y tipos en mis muestras son meta-tipos. Sólo reemplazarlos con los tipos apropiados para su marco favorito COI en su cabeza.)Dependency injection: ¿Cómo pasar el contenedor de inyección?
En mi métodos principales, normalmente configurar mi contenedor de hacer algo como esto:
static void Main()
{
IInjector in = new Injector();
in.Register<ISomeType>().For<SomeType>();
in.Register<IOtherType().For<OtherType>();
...
// Run actual application
App app = in.Resolve<App>();
app.Run();
}
mi pregunta es, ¿cómo se consigue el inyector envió alrededor? Normalmente solo había registrado el inyector y lo había inyectado en tipos que ellos mismos iban a inyectar, pero no estoy seguro de si este es el "patrón" adecuado.
Bien, ¿qué tal esto. La aplicación es un WinForm y tiene un botón que crea y muestra un formulario. Cada vez que se presiona este botón, se debe crear y mostrar una nueva instancia de este formulario. Este formulario tiene dependencias, por lo que debe ser resuelto por el formulario de la aplicación para cada instanciación. ¿Ahora que? – Alex
@Alex: en este caso, puede usar "Proveedores" (fábricas especializadas) que mencioné en mi otra publicación. La diferencia entre inyectar un proveedor e inyectar el inyector completo es que esto limita fuertemente las dependencias indirectas "secretas". IOW, no degrada el inyector a un localizador de servicio. –
@chris_l: Entonces, los "proveedores" pueden mantener el inyector alrededor, ¿verdad? De lo contrario, acabamos de mover el problema a otra parte. – Alex