Leggi su Getting Started. Dovresti iniziare.
Prima di tutto, ciò che si sta cercando è la container
. Costruirla dal ContainerBuilder
come in questa semplice applicazione WinForms:
static void Main()
{
using (var container = builder.Build())
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var mainForm = container.Resolve<MainForm>();
Application.Run(mainForm)
}
}
L'idea generale è che hai solo per risolvere il primo o il più in alto grado. Il contenitore gestirà la creazione di tutte le altre istanze basate sull'integrazione delle dipendenze tramite i parametri del costruttore.
Se il modello DI è seguito in tutta l'applicazione si dovrebbe avere solo a toccare il contenitore una volta all'avvio.
Come si risolve l'istanza più in alto dipende in gran parte dal tipo di applicazione che si sta costruendo. Se si tratta di un'app Web, lo ASP.Net integration e lo MVC integration si prenderanno cura di esso per te. (Dopo tutto, l'istanza più in alto in ASP.Net è la Application
che è fuori dal nostro controllo).
D'altra parte, se si tratta di un'app console o di un'app WinForms, la prima istanza verrà risolta manualmente in Main
, come nell'esempio precedente.
fonte
2010-04-29 13:01:36
Questo è l'esempio, ma cosa succede se ho bisogno di un caso in più classi? Impossibile registrare il tipo in ogni classe. – user137348
Ma devi in qualche modo risolvere questa istanza più in alto da qualche parte nel codice. I tipi vengono registrati all'avvio (Global.asax) e quindi è necessario risolvere l'istanza più in alto da qualche parte nel codice. Alla fine, ho trovato un articolo che descrive questo. http://geekswithblogs.net/Sharpoverride/archive/2009/08/15/ioc-in-.net-part-1-autofac.aspx Cosa ne pensi di questo approccio? – user137348
Vedere la mia risposta aggiornata ... e sì, l'approccio di @Sharpoverrides è ok, assicura che Global.asax non sia ingombrante con il codice di costruzione del contenitore. Dopotutto, dovresti davvero scrivere le unittest che testano il container, e avere una classe a responsabilità unica che costruisce il contenitore rende più facile il test. –