Lea sobre Getting Started. Debería comenzar.
En primer lugar, lo que usted está buscando es el container
. Construirlo desde el ContainerBuilder
como en esta sencilla aplicación de Windows Forms:
static void Main()
{
using (var container = builder.Build())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var mainForm = container.Resolve<MainForm>();
Application.Run(mainForm)
}
}
La idea general es que sólo tiene que resolver la primera o la instancia superior. El contenedor manejará la creación de todas las demás instancias basadas en la inyección de dependencia a través de parámetros de constructor.
Si se sigue el patrón DI en toda la aplicación, solo debe tocar el contenedor una vez en el inicio.
La forma de resolver la instancia más alta depende en gran medida del tipo de aplicación que esté creando. Si es una aplicación web, ASP.Net integration y MVC integration se encargarán de eso. (Después de todo, la instancia superior en ASP.Net es Application
que está fuera de nuestro control).
Por otro lado, si es una aplicación de consola o una aplicación de WinForms resolvería la primera instancia manualmente en Main
, como mi ejemplo anterior.
Ese es el ejemplo, pero ¿qué sucede si necesito una instancia en más clases? No se puede registrar el tipo en cada clase. – user137348
Pero de alguna manera debes resolver esta instancia superior en algún lugar del código. Los tipos se registran al inicio (Global.asax) y luego necesita resolver la instancia superior en algún lugar del código. Finalmente, encontré un artículo que describe esto. http://geekswithblogs.net/Sharpoverride/archive/2009/08/15/ioc-in-.net-part-1-autofac.aspx ¿Qué opina de este enfoque? – user137348
Vea mi respuesta actualizada ... y sí, el enfoque de @Sharpoverrides está bien, se asegura de que Global.asax no esté repleto de código de construcción de contenedores. Después de todo, debería escribir pruebas de unidad que prueben el contenedor, y tener una clase de responsabilidad única que construya el contenedor facilita la prueba. –