Suche…


Bemerkungen

Autofac ist ein IoC-Container für Microsoft .NET 4.5, Silverlight 5, Windows Store-Apps und Windows Phone 8-Apps. Es verwaltet die Abhängigkeiten zwischen Klassen, so dass sich Anwendungen mit zunehmender Größe und Komplexität leicht ändern lassen. Dies wird erreicht, indem reguläre .NET-Klassen als Komponenten behandelt werden.

Von Wikipedia :
In der Softwareentwicklung ist die Umkehrung der Steuerung (IoC) ein Entwurfsprinzip, bei dem benutzerdefinierte Abschnitte eines Computerprogramms den Steuerungsfluss von einem generischen Rahmen erhalten. Eine Softwarearchitektur mit diesem Design kehrt die Steuerung im Vergleich zur herkömmlichen prozeduralen Programmierung um: In der herkömmlichen Programmierung wird der benutzerdefinierte Code, der den Zweck des Programms ausdrückt, in wiederverwendbaren Bibliotheken zur Bewältigung generischer Aufgaben aufgerufen. Bei der Umkehrung der Steuerung ist dies jedoch der Rahmen das ruft den benutzerdefinierten oder aufgabenspezifischen Code auf.

Autofac installieren

Um Autofac in Ihrem Projekt verwenden zu können, müssen Sie lediglich Autofac über NuGet Package Manager installieren. Öffnen Sie die Lösung, in der Autofac verwendet werden soll, und wählen Sie dann Manager NuGet Packages for Solution... aus.

Tools -> NuGet Package Manager -> Manager NuGet Packages for Solution...

Geben Sie auf der Registerkarte NuGet-Solution in das Suchfeld "Autofac" ein. Stellen Sie sicher, dass Sie sich im Abschnitt "Durchsuchen" befinden. Installieren Sie die erste Option wie in der folgenden Abbildung dargestellt (beachten Sie die markierten Bereiche im Bild):

nuget-autofac

Bei der Installation über NuGet wird automatisch Autofac in den Referenzen der Projekte hinzugefügt, die während der Installation ausgewählt wurden.

Schauen Sie sich die offizielle Dokumentation an .

Autofac einrichten

Dieses Beispiel zeigt, wie Sie mit Inverion of Control mit Autofac mit einem relativ einfachen Projekt beginnen können, wobei Sie die offiziellen Einführungsdokumente genauestens befolgen.

  1. Erstellen Sie eine Konsolenanwendung über File -> New -> Project -> Console Application

  2. Installieren Sie Autofac für dieses Projekt. Hier können Sie die Installation von Autofac nachschlagen

  3. Fügen Sie 2 Schnittstellen und 2 Klassen mit folgenden Namen hinzu:

      Interfaces  |  Classes
    --------------------------
    IOutput       | ConsoleOutput (implementing IOutput)
    IDateWriter   | TodayWriter (implementing IDateWriter)
    

Zur Vereinfachung werden die using-Anweisungen und Namespaces nicht angezeigt.

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());
    }
}

Bisher war der Code einfach und unkompliziert. Kommen wir zu dem Teil, wo die automatische Abhängigkeitsinjektion stattfindet, was natürlich von Autofac durchgeführt wird!

Ersetzen Sie die Program in der Datei Program.cs durch diesen Code (Die Program wird bei der Projekterstellung automatisch von Visual Studio erstellt. Wenn dies nicht der Fall ist, erstellen Sie eine.)

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();
        }
    }
}

Bei der Ausführung sollte die Ausgabe das aktuelle Datum in der Konsole sein. Sie haben Autofac erfolgreich in Ihrem Projekt verwendet, um Abhängigkeiten automatisch einzufügen.

Hier ist was unter der Haube los ist:

  1. Beim Start der Anwendung erstellen wir einen ContainerBuilder und registrieren unsere Komponenten damit. Eine einfache Komponente ist ein .NET-Typ, der eine Schnittstelle implementiert und somit einige Dienste verfügbar macht . Lesen Sie Services vs. Komponenten .

  2. Wir registrieren dann unsere Komponenten (Klassen) bei den Diensten (Schnittstellen), die sie bereitstellen. Nach der Registrierung weiß Autofac, welche Instanz einer Klasse erstellt werden soll, wenn eine Schnittstelle aufgelöst werden soll .

  3. Schließlich, wenn wir das Programm ausführen:

    • Die WriteDate() -Methode (in Main() ) fragt Autofac nach einem IDateWriter .
    • Autofac sieht, dass IDateWriter TodayWriter so dass ein TodayWriter .
    • Autofac sieht, dass der TodayWriter einen IOutput in seinem Konstruktor benötigt.
    • Autofac sieht, dass IOutput ConsoleOutput , erstellt also eine neue ConsoleOutput Instanz.
    • Autofac verwendet die neue ConsoleOutput Instanz, um die Erstellung des TodayWriter .
    • Autofac gibt den vollständig aufgebauten TodayWriter für WriteDate() .


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow