.NET-HILFE

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

Microsoft.Extensions.DependencyInjection ist eine leistungsstarke Bibliothek, die von Microsoft .NET bereitgestellt wird, um Dependency Injection (DI) zu erleichtern, ein Software-Design-Muster, das lose Kopplung fördert und die Testbarkeit in Anwendungen verbessert. DI wird häufig mithilfe des in .NET Core integrierten DI-Containers oder Bibliotheken wie Autofac und Unity implementiert. DI beinhaltet das Injizieren von Abhängigkeiten (Objekte, die eine Klasse benötigt) in eine Klasse, anstatt dass die Klasse ihre Abhängigkeiten selbst erstellt. 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

Dependency Injection Container

  1. Service-Registrierung: Abhängigkeiten werden in einem DI-Container registriert, typischerweise an der Zusammensetzungswurzel der Anwendung. Diese Registrierungen geben an, wie der Container die Abhängigkeiten erstellen und verwalten soll.

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

Arten von Dependency Injection

  • Konstruktorinjektion: Registrierte Dienste werden einer Klasse über ihren Konstruktor bereitgestellt, was die häufigste und empfohlene Form der DI ist.
  • Methode-Injektion: 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 Klassen-Eigenschaften 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. Geltungsbereich: Abhängigkeiten mit Geltungsbereich werden einmal pro Anforderung oder Lebensdauer erstellt, was bedeutet, dass der Container innerhalb einer einzigen Anforderung oder Operation dieselbe Instanz bereitstellt. Diese Konsistenz ist vor allem in Webanwendungen nützlich, wo scoped dependencies dazu beitragen, eine stabile Abhängigkeit während einer Webanfrage aufrechtzuerhalten.

  2. Transient: 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 geteilt. Dies stellt sicher, dass dieselbe Instanz einer Singleton-Abhängigkeit für alle Anfragen während der gesamten Anwendungsdauer 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 Microsoft.Extensions.DependencyInjection-Pakets

Um mit der Verwendung von Dependency Injection in einem .NET Core-Projekt zu beginnen, müssen Sie zuerst das Microsoft.Extensions.DependencyInjection-Paket installieren. 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
$vbLabelText   $csharpLabel

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 erstellen wir eine Beispielanwendung (Konsolenanwendung), in der wir einen Dienstanbieter verwenden, um Dienste aufzulösen und in unser Programm zu injizieren.

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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

Ausgabe: Das Programm druckt die Zeichenfolgen-Nachricht "Hello, From Dependency Injection!"

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-Erstellung vereinfacht und eine breite Palette an Funktionen zur PDF-Bearbeitung bietet, einschließlich der Möglichkeit, PDFs aus HTML zu generieren, Text zu PDFs hinzuzufügen und PDFs mit Bildern zu bearbeiten, sichere Dokumente zu erstellen 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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

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
$vbLabelText   $csharpLabel

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 auf einfache Weise und mit minimalem Aufwand umfassende PDF-Dokumente erstellen. Lizenzierung für IronPDF ist verfügbar.

Chipego
Software-Ingenieur
Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.
< PREVIOUS
JUnit Java (Wie es für Entwickler funktioniert)
NÄCHSTES >
Ninject .NET Core (Wie es für Entwickler funktioniert)