.NET-HILFE

Microsoft.Extensions.DependencyInjection .NET 6 (Arbeiten mit PDF)

Veröffentlicht 13. August 2024
Teilen Sie:

Microsoft.Extensions.DependencyInjection ist eine leistungsfähige Bibliothek, die von Microsoft .NET zur Verfügung gestellt wird, um die Dependency Injection (DI)ist ein Software-Entwurfsmuster, das eine lose Kopplung fördert und die Testbarkeit von Anwendungen verbessert. DI wird häufig mit Hilfe von .NET Core's eingebauter DI-Container oder Bibliotheken wie Autofac und Unity. DI beinhaltet das Einfügen von Abhängigkeiten (objekte, die eine Klasse benötigt) in eine Klasse zu integrieren, anstatt dass die Klasse ihre Abhängigkeiten erzeugt. Dies geschieht in der Regel durch eine Konstruktor-, Methoden- oder Eigenschaftsinjektion.

Microsoft.Extensions.DependencyInjection .NET 6 (Arbeiten mit PDF): Abbildung 1 - Microsoft.Extensions.DependencyInjectionName-Dokumentation

Container für die Injektion von Abhängigkeiten

  1. Dienstregistrierung: Abhängigkeiten werden in einem DI-Container registriert, typischerweise im Composition Root der Anwendung. Diese Registrierungen geben an, wie der Container die Abhängigkeiten erstellen und verwalten soll.

  2. Auflösung von Abhängigkeiten: Wenn eine Komponente eine Abhängigkeit anfordert, löst der DI-Container die Abhängigkeit auf, indem er eine Instanz eines registrierten Typs erzeugt, der eine Erweiterungsmethode verwendet.

Arten von Dependency Injection

  • Konstruktorinjektion: Registrierte Dienste werden einer Klasse über ihren Konstruktor zur Verfügung gestellt, was die häufigste und empfohlene Form der DI ist.
  • Methodeninjektion: Dienste werden aufgelöst und als Parameter an eine Methode übergeben. Injektion von Eigenschaften: Singleton-Dienste oder Dienste mit einer begrenzten Lebensdauer werden der Klasse zugewiesen.
  • Eigenschaftsinjektion: Singleton-Dienste oder Dienste mit einer begrenzten Lebensdauer können Klasseneigenschaften zugewiesen werden. Dieser Ansatz ist jedoch weniger gebräuchlich und wird oft als schlechter als die Konstruktorinjektion angesehen, da er versteckte Abhängigkeiten einführen kann.

Verständnis von Lebenszeiten in Dependency Injection (DI): Scoped, Transient und Singleton

  1. Scoped: Scoped-Abhängigkeiten werden einmal pro Anfrage oder Lebenszeitbereich erstellt, d. h. der Container stellt dieselbe Instanz innerhalb einer einzigen Anfrage oder Operation bereit. Diese Konsistenz ist vor allem in Webanwendungen nützlich, wo scoped dependencies dazu beitragen, eine stabile Abhängigkeit während einer Webanfrage aufrechtzuerhalten.

  2. Transiente: Transiente Abhängigkeiten werden jedes Mal instanziiert, wenn sie vom Container angefordert werden. Dies bedeutet, dass eine neue Instanz einer transienten Abhängigkeit immer dann erzeugt wird, wenn sie benötigt wird. Typischerweise werden transiente Abhängigkeiten für leichtgewichtige, zustandslose Dienste oder Komponenten verwendet.

  3. Singleton: Singleton-Abhängigkeiten werden nur einmal instanziiert und während der gesamten Lebensdauer der Anwendung gemeinsam genutzt. Dadurch wird sichergestellt, dass während der gesamten Laufzeit der Anwendung für alle Anfragen dieselbe Instanz einer Singleton-Abhängigkeit verwendet wird. Singleton-Abhängigkeiten werden typischerweise für zustandsbehaftete Dienste oder Komponenten verwendet, die in der gesamten Anwendung universell zugänglich sein müssen.

Installation des Pakets Microsoft.Extensions.DependencyInjection

Um die Dependency Injection in einem .NET Core-Projekt zu verwenden, müssen Sie zunächst Folgendes installieren Microsoft.Extensions.DependencyInjection-Paket. Dies kann über die NuGet-Paketmanager-Konsole in Visual Studio mit dem folgenden Code erfolgen:

Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.DependencyInjection
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Bildschirmfoto

Microsoft.Extensions.DependencyInjection .NET 6 (Arbeiten mit PDF): Abbildung 2 - Geben Sie den Befehl in das Terminal ein, um das Paket zu installieren

Beispiel: Grundlegende Dependency Injection

In diesem Beispiel wollen wir eine Beispielanwendung erstellen (konsolenanwendung) wobei wir einen Dienstanbieter nutzen, um Dienste aufzulösen und in unser Programm zu integrieren.

using Microsoft.Extensions.DependencyInjection;
using System;
public interface IMessageService
{
    void SendMessage(string message);
}
public class ConsoleMessageService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine(message);
    }
}
using Microsoft.Extensions.DependencyInjection;
using System;
public interface IMessageService
{
    void SendMessage(string message);
}
public class ConsoleMessageService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine(message);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Das Codeschnipsel erstellt eine Regel für den Versand von Nachrichten namens IMessageService. Es ist wie die Einrichtung eines Plans, wie Nachrichten gesendet werden sollen. Dann wird die Klasse ConsoleMessageService dazu gebracht, diese Regel zu befolgen, indem Console.WriteLine zum Senden von Nachrichten verwendet wird. Dadurch wird der Gedanke des Versendens von Nachrichten vom eigentlichen Prozess getrennt, so dass es einfacher ist, die Art und Weise des Versendens von Nachrichten später zu ändern, falls erforderlich. Sie hilft, das Nachrichtensystem zu organisieren und in der Anwendung einfach zu verwalten.

class Program
{
    static void Main(string[] args)
    {
        // Create a service provider
        var serviceProvider = new ServiceCollection()
            // Register the service implementation
            .AddTransient<IMessageService, ConsoleMessageService>()
            .BuildServiceProvider();
        // Resolve the service
       var messageService = serviceProvider.GetRequiredService<IMessageService>();
        // Use the service to send a message
        messageService.SendMessage("Hello,From Dependency Injection!");
    }
}
class Program
{
    static void Main(string[] args)
    {
        // Create a service provider
        var serviceProvider = new ServiceCollection()
            // Register the service implementation
            .AddTransient<IMessageService, ConsoleMessageService>()
            .BuildServiceProvider();
        // Resolve the service
       var messageService = serviceProvider.GetRequiredService<IMessageService>();
        // Use the service to send a message
        messageService.SendMessage("Hello,From Dependency Injection!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Dieser Code richtet einen serviceProvider zur Verwaltung von Werkzeugen ein. Es fügt ein ConsoleMessageService-Werkzeug hinzu. Dann ruft es das Tool IMessageService von serviceProvider ab und verwendet es, um die Nachricht "Hello, Dependency Injection" zu senden!" an die Konsole.

Ausgabe: Das Programm gibt die String-Meldung "Hello, From Dependency Injection" aus!"

Microsoft.Extensions.DependencyInjection .NET 6 (Arbeiten mit PDF): Abbildung 3 - Konsolenausgabe des obigen Codes

IronPDF: C# PDF-Bibliothek

IronPDF ist eine leistungsstarke Bibliothek für C#, die den komplexen Prozess der PDF-Erzeugung vereinfacht und eine breite Palette von Funktionen für die PDF-Bearbeitung bietet, einschließlich der Fähigkeit, PDF-Dateien zu erzeugen PDFs aus HTMLder Vorgang der Addition text und bilder, die Erstellung sicherer Dokumente und vieles mehr.

Microsoft.Extensions.DependencyInjection .NET 6 (Arbeiten mit PDF): Abbildung 4 - Microsoft.Extensions.DependencyInjection C# Beispiel (Wie es für Entwickler funktioniert): Abbildung 2 - IronPDF

Verwendung von IronPDF mit Dependency Injection

Um die IronPDF-Bibliothek in eine .NET Core-Anwendung zu integrieren, die die Funktionen der Dependency Injection und die Erweiterungsmethoden mit Microsoft.Extensions.DependencyInjection nutzt, können Sie wie folgt vorgehen:

  1. Erstellen Sie eine Schnittstelle, um Ihren PDF-Generierungsdienst zu definieren.

  2. Implementieren Sie die Schnittstelle.

  3. Verwenden Sie die Erweiterungsmethoden, um den Dienst im Container für die Injektion von Abhängigkeiten zu registrieren.

  4. Integrieren Sie den Dienst nach Bedarf in Ihre Anwendung.

Schnittstelle definieren

Erstellen Sie eine Schnittstelle, um Ihren PDF-Generierungsdienst zu definieren.

public interface IPdfService
{
    void GeneratePdf(string baseUrl, string query, string filePath);
}
public interface IPdfService
{
    void GeneratePdf(string baseUrl, string query, string filePath);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Schnittstelle implementieren

Implementieren Sie die Schnittstelle mit IronPDF für die Erstellung der PDF-Datei.

public class IronPdfService : IPdfService
{
    public void GeneratePdf(string baseUrl, string query, string filePath)
    {
        License.LicenseKey = "Your-License-Key";
        string encodedQuery = HttpUtility.UrlEncode(query);
        string fullUrl = $"{baseUrl}?query={encodedQuery}";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(fullUrl);
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
public class IronPdfService : IPdfService
{
    public void GeneratePdf(string baseUrl, string query, string filePath)
    {
        License.LicenseKey = "Your-License-Key";
        string encodedQuery = HttpUtility.UrlEncode(query);
        string fullUrl = $"{baseUrl}?query={encodedQuery}";
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf(fullUrl);
        pdf.SaveAs(filePath);
        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Dienst registrieren

Konfigurieren Sie in Ihrer Klasse Program.cs die Injektion von Abhängigkeiten:

builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Dieses Setup löst Abhängigkeiten auf, indem es die IPdfService-Schnittstelle mit IronPdfService implementiert und so einen singulären Diensttyp für die PDF-Erzeugung schafft. Sie wird dann in der gesamten Anwendung referenziert, um eine einheitliche Funktionalität für die Erstellung von PDFs zu gewährleisten.

Verwendung

Injizieren Sie IPdfService in Ihren Controller oder Dienst und verwenden Sie ihn:

public class MyController : Controller
{
    private readonly IPdfService _pdfService;
    public MyController(IPdfService pdfService)
    {
        _pdfService = pdfService;
    }
    public IActionResult GeneratePdf()
    {
        string baseUrl = "https://ironpdf.com/";
        string query = "Hello World from IronPDF !";
        string filePath = "Demo.pdf";
        _pdfService.GeneratePdf(baseUrl, query, filePath);
        return View();
    }
}
public class MyController : Controller
{
    private readonly IPdfService _pdfService;
    public MyController(IPdfService pdfService)
    {
        _pdfService = pdfService;
    }
    public IActionResult GeneratePdf()
    {
        string baseUrl = "https://ironpdf.com/";
        string query = "Hello World from IronPDF !";
        string filePath = "Demo.pdf";
        _pdfService.GeneratePdf(baseUrl, query, filePath);
        return View();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

Dieses Setup stellt sicher, dass der IronPdfService vom Microsoft Extensions Dependency Injection-Container erstellt und verwaltet wird. Sie können den standardmäßigen PDF-Erzeugungsdienst mühelos ersetzen, indem Sie eine alternative Implementierung für die IPdfService-Schnittstelle anbieten, ohne dass Sie den verbrauchenden Code ändern müssen.

Screenshot der PDF-Datei

Microsoft.Extensions.DependencyInjection .NET 6 (Arbeiten mit PDF): Abbildung 5 - Beispielausgabe unter Verwendung des Microsoft Extensions Dependency Injection-Containers in Verbindung mit IronPDF

Schlussfolgerung

Microsoft.Extensions.DependencyInjection ist ein leistungsfähiges Tool in .NET 6 zur Implementierung von Dependency Injection, das die lose Kopplung fördert und die Testbarkeit von Anwendungen verbessert. Durch die Integration von IronPDF, einer funktionsreichen C#-Bibliothek, können Entwickler problemlos erzeugen ist verfügbar.

< PREVIOUS
JUnit Java (Wie es für Entwickler funktioniert)
NÄCHSTES >
Ninject .NET Core (Wie es für Entwickler funktioniert)

Sind Sie bereit, loszulegen? Version: 2024.10 gerade veröffentlicht

Gratis NuGet-Download Downloads insgesamt: 11,308,499 Lizenzen anzeigen >