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):

NuGet-autofac

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 .

  1. Creare un'applicazione console da File -> New -> Project -> Console Application

  2. Installa Autofac per questo progetto. Puoi dare un'occhiata qui Installazione di Autofac

  3. 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:

  1. All'avvio dell'applicazione, stiamo creando un ContainerBuilder e 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 .

  2. 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 .

  3. Infine, quando eseguiamo il programma:

    • Il metodo WriteDate() (in Main() ) richiede Autofac per un IDateWriter .
    • Autofac vede che IDateWriter associa a TodayWriter quindi inizia a creare un TodayWriter .
    • Autofac vede che il TodayWriter bisogno di un IOutput nel suo costruttore.
    • Autofac rileva che IOutput mapping a ConsoleOutput quindi crea una nuova istanza di ConsoleOutput .
    • Autofac utilizza la nuova istanza di ConsoleOutput per completare la costruzione di TodayWriter .
    • Autofac restituisce il full- TodayWriter per WriteDate() da consumare.


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow