Verwendung von Autofac in ASP.Net Core

Die Abhängigkeitsinjektion erleichtert die lose Kopplung und fördert die Testbarkeit und Wartung. ASP.Net Core bietet integrierte Unterstützung für die Abhängigkeitsinjektion (eine Art Umkehrung der Steuerung) mit einem minimalistischen Abhängigkeitsinjektionscontainer. Dem eingebauten Container fehlen jedoch viele der Merkmale einer vollwertigen Abhängigkeitsinjektion oder Inversion des Steuercontainers.

Um dies zu überwinden, können Sie Container von Drittanbietern in ASP.Net Core verwenden. Mit anderen Worten, Sie können den eingebauten Container problemlos durch einen Container eines Drittanbieters ersetzen. Autofac ist eine Inversion des Steuercontainers, mit der Abhängigkeiten aufgelöst werden können. Dieser Artikel enthält eine Diskussion darüber, wie wir mit Autofac in ASP.Net Core arbeiten können.

Erstellen Sie ein ASP.Net Core-Projekt in Visual Studio

Zuerst erstellen wir ein ASP.Net Core-Projekt in Visual Studio. Angenommen, Visual Studio 2017 oder Visual Studio 2019 ist auf Ihrem System installiert, führen Sie die folgenden Schritte aus, um ein neues ASP.Net Core-Projekt in Visual Studio zu erstellen.

  1. Starten Sie die Visual Studio-IDE.
  2. Klicken Sie auf "Neues Projekt erstellen".
  3. Wählen Sie im Fenster "Neues Projekt erstellen" aus der Liste der angezeigten Vorlagen "ASP.Net Core-Webanwendung" aus.
  4. Weiter klicken.
  5. Geben Sie im Fenster "Konfigurieren Sie Ihr neues Projekt" den Namen und den Speicherort für das neue Projekt an.
  6. Klicken Sie auf Erstellen.
  7. Wählen Sie im Fenster "Neue ASP.Net Core-Webanwendung erstellen" .Net Core als Laufzeit und ASP.Net Core 2.2 (oder höher) aus der Dropdown-Liste oben aus.
  8. Wählen Sie als Projektvorlage „Webanwendung“. 
  9. Stellen Sie sicher, dass die Kontrollkästchen "Docker-Unterstützung aktivieren" und "Für HTTPS konfigurieren" deaktiviert sind, da diese Funktionen hier nicht verwendet werden.
  10. Stellen Sie sicher, dass die Authentifizierung auf "Keine Authentifizierung" eingestellt ist, da wir auch keine Authentifizierung verwenden.
  11. Klicken Sie auf Erstellen.

Dadurch wird ein neues ASP.Net Core-Projekt in Visual Studio erstellt. Wir werden dieses Projekt in den folgenden Abschnitten dieses Artikels verwenden, um mit Autofac zu arbeiten.

Installieren Sie Autofac in Ihrem ASP.Net Core-Projekt

Autofac ist einfach zu installieren - Sie können es über NuGet installieren. Zum Zeitpunkt dieses Schreibens ist die aktuelle Version von Autofac 4.9.2. Um mit Autofac zu arbeiten, sollten Sie auch das Paket Autofac.Extensions.DependencyInjection installieren. Dadurch wird sichergestellt, dass Sie die erforderlichen Abhängigkeiten für die Arbeit mit Autofac installiert haben.

Wählen Sie das oben erstellte ASP.Net Core-Webanwendungsprojekt aus, klicken Sie mit der rechten Maustaste und installieren Sie Autofac.Extensions.DependencyInjection über den NuGet Package Manager. Akzeptieren Sie alle Lizenzvereinbarungen, zu denen Sie während der Installation aufgefordert werden. Alternativ können Sie dieses Paket installieren, indem Sie den folgenden Befehl in die NuGet Package Manager-Konsole eingeben:

Install-Package Autofac.Extensions.DependencyInjection

Erstellen Sie eine Klasse in Ihrer ASP.Net Core-Anwendung

Um die Abhängigkeitsinjektion zu veranschaulichen, benötigen wir einige Objekte, mit denen wir arbeiten können. Betrachten Sie die IAuthorRepository-Schnittstelle, die die Deklaration der GetMessage-Methode unten enthält.

 öffentliche Schnittstelle IAuthorRepository

    {

        Zeichenfolge GetMessage ();

    }}

Die AuthorRepository-Klasse implementiert die IAuthorRepository-Schnittstelle wie unten gezeigt.

 öffentliche Klasse AuthorRepository: IAuthorRepository

    {

        öffentlicher String GetMessage ()

        {

            return "Hallo Welt";

        }}

    }}

Beachten Sie, dass dies eine minimalistische Implementierung eines Repositorys ist, dh nicht die CRUD-Methoden enthält, die ein typisches Repository enthält. Ich überlasse es Ihnen, die CRUD-Methoden entsprechend zu implementieren.

Konfigurieren Sie Autofac in ASP.Net Core

Um Autofac zu konfigurieren, müssen Sie den Konfigurationscode in der ConfigureServices-Methode der Startup-Klasse angeben. Beachten Sie, dass die ConfigureServices-Methode verwendet wird, um dem Container zur Laufzeit Dienste hinzuzufügen.

Der erste Schritt besteht darin, einen Container-Builder zu erstellen, um die erforderlichen Dienste beim Autofac-Container zu registrieren. Der erste Schritt besteht darin, die Framework-Services mithilfe der unten gezeigten Populate-Methode zu füllen.

var containerBuilder = neuer ContainerBuilder ();

containerBuilder.Populate (Dienste);

Der nächste Schritt besteht darin, die benutzerdefinierten Dienste bei Autofac zu registrieren. Verwenden Sie dazu die RegisterType-Methode für die Container-Builder-Instanz (siehe unten).

containerBuilder.RegisterType (). As ();

Schreiben Sie den folgenden Code, um den Container zu erstellen.

var container = containerBuilder.Build ();

return container.Resolve ();

Hier ist der vollständige Quellcode der ConfigureServices-Methode als Referenz:

public IServiceProvider ConfigureServices (IServiceCollection-Dienste)

   {

       services.AddMvc ();

       var containerBuilder = neuer ContainerBuilder ();

       containerBuilder.Populate (Dienste);

       containerBuilder.RegisterType ().

       Wie();

       var container = containerBuilder.Build ();

       return container.Resolve ();

   }}

Verwenden Sie Autofac in Ihren Controllern in ASP.Net Core

Nachdem Autofac in Ihrem Projekt installiert und konfiguriert wurde, können Sie es in Ihren Controllern verwenden. Das folgende Codefragment zeigt, wie Sie Abhängigkeiten im ValuesController auflösen können.

  öffentliche Klasse ValuesController: ControllerBase

  {

        private IAuthorRepository _authorRepository; 

        public ValuesController (IAuthorRepository authorRepository) 

        {

            _authorRepository = authorRepository;

        } // API / Werte abrufen

        [HttpGet]

        public ActionResult Get ()

        {

            return _authorRepository.GetMessage ();

        }}

     // Andere Aktionsmethoden

  }}

Das Abhängigkeitsinjektionsprinzip ist eine Realisierung des Inversionsregelprinzips. Mit dieser Technik werden Abhängigkeiten aus der Implementierung entfernt, indem Sie diese Abhängigkeiten extern einfügen können. Die Inversion von Steuercontainern wie Autofac nutzt die Abhängigkeitsinjektion, um den Steuerungsfluss umzukehren und die Instanziierung und das Lebenszyklusmanagement von Objekten zu automatisieren.

Die Abhängigkeitsinjektion hat drei Formen: Konstruktorinjektion, Schnittstelleninjektion und Eigenschaftsinjektion. In diesem Beispiel haben wir die Konstruktorinjektion verwendet, um zur Laufzeit in der ValuesController-Klasse eine Abhängigkeit - nämlich eine Instanz vom Typ AuthorRepository - zu injizieren.

Wir haben gesehen, wie Autofac verwendet werden kann, um den Standard-Abhängigkeitsinjektionscontainer in ASP.Net Core zu ersetzen, aber wir haben nur die Oberfläche seiner Funktionen zerkratzt. Ich werde Autofac in zukünftigen Beiträgen hier genauer untersuchen.