autofac Tutorial
Iniziare con autofac
Ricerca…
Osservazioni
Autofac è un contenitore IoC per le app Microsoft .NET 4.5, Silverlight 5, Windows Store e Windows Phone 8. Gestisce le dipendenze tra le classi in modo che le applicazioni rimangano facilmente modificabili man mano che crescono in termini di dimensioni e complessità. Questo risultato si ottiene trattando regolarmente le classi .NET come componenti.
Da Wikipedia :
Nell'ingegneria del software, l'inversione del controllo (IoC) è un principio di progettazione in cui porzioni personalizzate di un programma per computer ricevono il flusso di controllo da un quadro generico. Un'architettura software con questo design inverte il controllo rispetto alla programmazione procedurale tradizionale: nella programmazione tradizionale, il codice personalizzato che esprime lo scopo del programma chiama in biblioteche riutilizzabili per occuparsi di compiti generici, ma con inversione di controllo, è il framework che chiama nel codice personalizzato o specifico dell'attività.
Installazione di Autofac
Per utilizzare Autofac nel tuo progetto, tutto ciò che devi fare è installare Autofac da NuGet Package Manager. Aprire la soluzione che desidera utilizzare Autofac in, quindi selezionare Manager NuGet Packages for Solution... andando a:
Tools -> NuGet Package Manager -> Manager NuGet Packages for Solution...
Nella scheda NuGet-Solution , digita "Autofac" nella casella di ricerca. Assicurati di essere nella sezione "Sfoglia". Installa la prima opzione come mostrato nell'immagine seguente (prendi nota delle regioni marcate nell'immagine):
L'installazione tramite NuGet aggiungerà automaticamente Autofac nei Riferimenti dei progetti selezionati durante l'installazione.
Dai un'occhiata alla documentazione ufficiale .
Impostazione di Autofac
Questo esempio mostrerà come iniziare con Inverion of Control usando Autofac con un progetto relativamente semplice, seguendo da vicino i documenti ufficiali di avvio .
Creare un'applicazione console da
File -> New -> Project -> Console ApplicationInstalla Autofac per questo progetto. Puoi dare un'occhiata qui Installazione di Autofac
Aggiungi 2 interfacce e 2 classi, con i seguenti nomi:
Interfaces | Classes -------------------------- IOutput | ConsoleOutput (implementing IOutput) IDateWriter | TodayWriter (implementing IDateWriter)
Per semplicità, le istruzioni e gli spazi dei nomi non vengono visualizzati.
IOuput.cs
public interface IOutput
{
void Write(string content);
}
ConsoleOutput.cs
public class ConsoleOutput : IOutput
{
public void Write(string content)
{
Console.WriteLine(content);
}
}
IDateWriter.cs
public interface IDateWriter
{
void WriteDate();
}
TodayWriter.cs
public class TodayWriter : IDateWriter
{
private IOutput _output;
public TodayWriter(IOutput output)
{
_output = output;
}
public void WriteDate()
{
_output.Write(DateTime.Today.ToShortDateString());
}
}
Finora il codice è stato semplice e chiaro. Consente di arrivare alla parte in cui avviene l'iniezione automatica delle dipendenze, che ovviamente viene eseguita da Autofac!
Sostituisci la classe Program nel file Program.cs con questo codice (la classe Program viene creata automaticamente da Visual Studio durante la creazione del progetto. Se non esiste, vai avanti e creane uno):
class Program
{
private static IContainer Container { get; set; }
static void Main(string[] args)
{
var builder = new ContainerBuilder();
builder.RegisterType<ConsoleOutput>().As<IOutput>();
builder.RegisterType<TodayWriter>().As<IDateWriter>();
Container = builder.Build();
WriteDate();
}
public static void WriteDate()
{
using (var scope = Container.BeginLifetimeScope())
{
var writer = scope.Resolve<IDateWriter>();
writer.WriteDate();
}
}
}
Quando è in esecuzione, l'output dovrebbe essere la data corrente nella console. Hai utilizzato correttamente Autofac nel tuo progetto per iniettare automaticamente le dipendenze.
Ecco cosa sta succedendo sotto il cofano:
All'avvio dell'applicazione, stiamo creando un
ContainerBuildere registrando i nostri componenti con esso. Un componente in termini semplici è un tipo .NET che implementa un'interfaccia e quindi espone alcuni servizi . Leggi servizi e componenti .Quindi registriamo i nostri componenti (classi) con i servizi (interfacce) che espongono. Quando registrato, Autofac conosce quale istanza di una classe creare quando un'interfaccia deve essere risolta .
Infine, quando eseguiamo il programma:
- Il metodo
WriteDate()(inMain()) richiede Autofac per unIDateWriter. - Autofac vede che
IDateWriterassocia aTodayWriterquindi inizia a creare unTodayWriter. - Autofac vede che il
TodayWriterbisogno di unIOutputnel suo costruttore. - Autofac rileva che
IOutputmapping aConsoleOutputquindi crea una nuova istanza diConsoleOutput. - Autofac utilizza la nuova istanza di
ConsoleOutputper completare la costruzione diTodayWriter. - Autofac restituisce il full-
TodayWriterperWriteDate()da consumare.
- Il metodo
