Zum Fußzeileninhalt springen
.NET HILFE

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

Microsoft.Extensions.DependencyInjection ist eine leistungsstarke Bibliothek von Microsoft .NET, die die Dependency Injection (DI) erleichtert, ein Software-Entwurfsmuster, das lockere Kopplung fördert und die Testbarkeit von Anwendungen verbessert. DI wird häufig mithilfe des eingebauten DI-Containers von .NET Core 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 erstellt. Dies geschieht typischerweise durch Konstruktor-, Methoden- oder Eigenschafteninjektion.

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 Kompositionswurzel der Anwendung. Diese Registrierungen geben an, wie der Container die Abhängigkeiten erstellen und verwalten soll.

  2. Dependency Auflö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 der Dependency Injection

  • Konstruktorinjektion: Registrierte Dienste werden einer Klasse über ihren Konstruktor bereitgestellt, was die häufigste und empfohlene Form der DI ist.
  • Methodeninjektion: Dienste werden aufgelöst und als Parameter an eine Methode übergeben.
  • Eigenschafteninjektion: Singleton-Dienste oder Dienste mit einer festgelegten Lebenszeit können Klasseneigenschaften zugewiesen werden. Diese Vorgehensweise ist jedoch weniger verbreitet und wird oft als weniger wertig im Vergleich zur Konstruktorinjektion angesehen, da sie versteckte Abhängigkeiten einführen kann.

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

  1. Gescoped: Gescopte Abhängigkeiten werden einmal pro Anfrage oder Lebensdauerbereich erstellt, was bedeutet, dass der Container innerhalb einer einzelnen Anfrage oder eines Vorgangs dieselbe Instanz bereitstellt. Diese Konsistenz ist besonders nützlich in Webanwendungen, wo gescopte Abhängigkeiten helfen, 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 jedes Mal, wenn eine transiente Abhängigkeit benötigt wird, eine neue Instanz erzeugt wird. Typischerweise werden transiente Abhängigkeiten für leichte, 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 Dauer der Anwendung verwendet wird. Singleton-Abhängigkeiten werden typischerweise für zustandsbehaftete Dienste oder Komponenten verwendet, die universellen Zugriff über die gesamte Anwendung benötigen.

Installation Microsoft.Extensions.DependencyInjection Paket

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

Install-Package Microsoft.Extensions.DependencyInjection

Screenshot

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 sie in unser Programm zu injizieren.

using Microsoft.Extensions.DependencyInjection;
using System;

// Define a service interface
public interface IMessageService
{
    void SendMessage(string message);
}

// Implement the service interface
public class ConsoleMessageService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine(message); // Output the message to the console
    }
}
using Microsoft.Extensions.DependencyInjection;
using System;

// Define a service interface
public interface IMessageService
{
    void SendMessage(string message);
}

// Implement the service interface
public class ConsoleMessageService : IMessageService
{
    public void SendMessage(string message)
    {
        Console.WriteLine(message); // Output the message to the console
    }
}
$vbLabelText   $csharpLabel

Der Codeausschnitt erstellt ein Interface IMessageService für das Versenden von Nachrichten, ähnlich einem Vertrag, wie Nachrichten gesendet werden sollen. Die Klasse ConsoleMessageService implementiert dieses Interface unter Verwendung von Console.WriteLine, um Nachrichten zu senden. Diese Trennung ermöglicht es, das Konzept des Nachrichtensendens unabhängig davon zu ändern, wie sie versendet werden, und macht das System flexibel und handhabbar.

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!");
    }
}
$vbLabelText   $csharpLabel

Dieser Code richtet einen serviceProvider ein, um Dienste zu verwalten. Er registriert ConsoleMessageService als die Implementierung für IMessageService, und macht es verfügbar, um überall dort injiziert zu werden, wo es benötigt wird. Die Main-Methode ruft dann eine Instanz von IMessageService vom serviceProvider ab und verwendet sie, um eine Nachricht an die Konsole zu senden.

Ausgabe: Das Programm druckt die Zeichenketten-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 von Funktionen zur PDF-Manipulation 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 Dependency Injection-Funktionen und Erweiterungsmethoden mit Microsoft.Extensions.DependencyInjection nutzt, gehen Sie wie folgt vor:

  1. Erstellen Sie ein Interface, um Ihren PDF-Erstellungsdienst zu definieren.
  2. Implementieren Sie das Interface.
  3. Verwenden Sie Erweiterungsmethoden, um den Dienst im Dependency Injection-Container zu registrieren.
  4. Injizieren Sie den Dienst nach Bedarf in Ihre Anwendung.

Benutzeroberfläche definieren

Erstellen Sie ein Interface, um Ihren PDF-Erstellungsdienst zu definieren.

public interface IPdfService
{
    void GeneratePdf(string baseUrl, string query, string filePath);
}
public interface IPdfService
{
    void GeneratePdf(string baseUrl, string query, string filePath);
}
$vbLabelText   $csharpLabel

Implementiere Schnittstelle

Implementieren Sie das Interface unter Verwendung von IronPDF zur Erstellung der PDF-Datei.

using IronPdf;
using System;
using System.Web;

// Implement the PDF generation interface
public class IronPdfService : IPdfService
{
    public void GeneratePdf(string baseUrl, string query, string filePath)
    {
        License.LicenseKey = "Your-License-Key"; // Set the IronPDF license key
        string encodedQuery = HttpUtility.UrlEncode(query); // Encode the query string
        string fullUrl = $"{baseUrl}?query={encodedQuery}"; // Construct the full URL
        var renderer = new ChromePdfRenderer(); // Create a PDF renderer
        var pdf = renderer.RenderUrlAsPdf(fullUrl); // Render the PDF from the URL
        pdf.SaveAs(filePath); // Save the PDF to the specified file path
        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
using IronPdf;
using System;
using System.Web;

// Implement the PDF generation interface
public class IronPdfService : IPdfService
{
    public void GeneratePdf(string baseUrl, string query, string filePath)
    {
        License.LicenseKey = "Your-License-Key"; // Set the IronPDF license key
        string encodedQuery = HttpUtility.UrlEncode(query); // Encode the query string
        string fullUrl = $"{baseUrl}?query={encodedQuery}"; // Construct the full URL
        var renderer = new ChromePdfRenderer(); // Create a PDF renderer
        var pdf = renderer.RenderUrlAsPdf(fullUrl); // Render the PDF from the URL
        pdf.SaveAs(filePath); // Save the PDF to the specified file path
        Console.WriteLine($"PDF successfully created from: {fullUrl}");
        Console.WriteLine($"Saved to: {filePath}");
    }
}
$vbLabelText   $csharpLabel

Dienstleistung registrieren

Konfigurieren Sie in Ihrer Program.cs-Klasse die Dependency Injection:

builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
$vbLabelText   $csharpLabel

Diese Konfiguration löst Abhängigkeiten, indem das IPdfService-Interface mit IronPdfService implementiert wird, wobei eine Singleton-Dienstart für die PDF-Erstellung eingerichtet wird. Es wird dann in der gesamten Anwendung referenziert, um konsistente Funktionalität zur Erstellung von PDFs sicherzustellen.

Benutzung

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";

        // Use the injected PDF service to generate a 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";

        // Use the injected PDF service to generate a PDF
        _pdfService.GeneratePdf(baseUrl, query, filePath);

        return View();
    }
}
$vbLabelText   $csharpLabel

Diese Konfiguration stellt sicher, dass der IronPdfService vom Microsoft Extensions Dependency Injection-Container erstellt und verwaltet wird. Sie können den standardmäßigen PDF-Erstellungsdienst mühelos durch eine alternative Implementierung des IPdfService-Interfaces ersetzen, ohne den Konsumcode ändern zu 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

Abschluss

Microsoft.Extensions.DependencyInjection ist ein leistungsstarkes Werkzeug in .NET 6 für die Implementierung der Dependency Injection, die lockere Kopplung fördert und die Testbarkeit von Anwendungen verbessert. Durch die Integration von IronPDF, einer funktionsreichen C#-Bibliothek, können Entwickler umfassende PDF-Dokumente mühelos erstellen. Lizenzierung für IronPDF ist verfügbar.

Häufig gestellte Fragen

Welche Rolle spielt Microsoft.Extensions.DependencyInjection in .NET 6?

Microsoft.Extensions.DependencyInjection in .NET 6 wird verwendet, um Dependency Injection zu implementieren, ein Entwurfsmuster, das hilft, lose gekoppelte Anwendungen zu erstellen, indem Service-Lebensdauern und Abhängigkeiten mit einem DI-Container verwaltet werden.

Wie kann Dependency Injection die Testbarkeit in Anwendungen verbessern?

Dependency Injection verbessert die Testbarkeit, indem Abhängigkeiten in eine Klasse injiziert werden, was es einfacher macht, bei Tests Schein-Objekte anstelle von realen Implementierungen zu verwenden.

Welche Vorteile bietet die Verwendung von Dependency Injection in .NET-Anwendungen?

Die Vorteile der Verwendung von Dependency Injection in .NET-Anwendungen umfassen verbesserte Code-Wartbarkeit, Skalierbarkeit und die Fähigkeit, Abhängigkeiten zur Laufzeit leicht zu verwalten und zu konfigurieren.

Wie implementiert man Dependency Injection in einer .NET Core-Anwendung?

In einer .NET Core-Anwendung wird Dependency Injection implementiert, indem Dienste während des Anwendungsstarts im DI-Container konfiguriert und sie in Konstruktoren oder Methoden nach Bedarf injiziert werden.

Wie kann man HTML in einer .NET Core-Anwendung in PDF konvertieren?

Sie können HTML in einer .NET Core-Anwendung mit den Methoden von IronPDF konvertieren, wie RenderHtmlAsPdf für HTML-Strings oder RenderHtmlFileAsPdf für HTML-Dateien.

Welche verschiedenen Lebensdauern von Diensten gibt es bei Dependency Injection und wie beeinflussen sie das Anwendungsverhalten?

Die Dienstlebensdauern bei Dependency Injection sind Scoped, Transient und Singleton. Scoped-Dienste werden einmal pro Anforderung erstellt, Transient-Dienste werden jedes Mal erstellt, wenn sie angefordert werden, und Singleton-Dienste werden einmal erstellt und während der gesamten Anwendung geteilt.

Wie kann man eine C#-PDF-Bibliothek innerhalb eines .NET Core-Projekts mit Dependency Injection integrieren?

Um eine C#-PDF-Bibliothek wie IronPDF innerhalb eines .NET Core-Projekts mit Dependency Injection zu integrieren, müssen Sie eine Schnittstelle für PDF-Dienste erstellen, sie implementieren, den Dienst im DI-Container registrieren und nach Bedarf in Ihre Klassen injizieren.

Wie ist der Installationsprozess des Microsoft.Extensions.DependencyInjection-Pakets?

Das Microsoft.Extensions.DependencyInjection-Paket kann mit der NuGet-Paket-Manager-Konsole in Visual Studio mit dem Befehl Install-Package Microsoft.Extensions.DependencyInjection installiert werden.

Wie kann IronPDF mit Dependency Injection zur PDF-Erzeugung verwendet werden?

IronPDF kann mit Dependency Injection verwendet werden, indem ein PDF-Dienstinterface eingerichtet, mit IronPDF-Methoden implementiert und im DI-Container registriert wird. Der Dienst kann dann injiziert und verwendet werden, um PDFs aus URLs oder HTML-Inhalten zu erzeugen.

Kann man eine C#-PDF-Bibliothek in einer DI-Einrichtung ersetzen, ohne den konsumierenden Code zu ändern?

Ja, man kann eine C#-PDF-Bibliothek in einer DI-Einrichtung ersetzen, indem man eine Alternative zur Schnittstelle für PDF-Dienste implementiert, was es ermöglicht, Bibliotheken zu wechseln, ohne den konsumierenden Code zu ändern.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen