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 documentation

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 im 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
    }
}
Imports Microsoft.Extensions.DependencyInjection
Imports System

' Define a service interface
Public Interface IMessageService
	Sub SendMessage(ByVal message As String)
End Interface

' Implement the service interface
Public Class ConsoleMessageService
	Implements IMessageService

	Public Sub SendMessage(ByVal message As String) Implements IMessageService.SendMessage
		Console.WriteLine(message) ' Output the message to the console
	End Sub
End Class
$vbLabelText   $csharpLabel

Der Codeausschnitt erstellt eine Schnittstelle IMessageService zum Senden von Nachrichten, quasi einen Vertrag darüber, wie Nachrichten gesendet werden sollen. Die Klasse ConsoleMessageService implementiert diese Schnittstelle, indem sie Console.WriteLine zum Senden von Nachrichten verwendet. 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!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a service provider
		Dim serviceProvider = (New ServiceCollection()).AddTransient(Of IMessageService, ConsoleMessageService)().BuildServiceProvider()

		' Resolve the service
		Dim messageService = serviceProvider.GetRequiredService(Of IMessageService)()

		' Use the service to send a message
		messageService.SendMessage("Hello, From Dependency Injection!")
	End Sub
End Class
$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 Methode Main ruft dann eine Instanz von IMessageService vom Dienstanbieter ab und verwendet diese, 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 (Funktionsweise für Entwickler): 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);
}
Public Interface IPdfService
    Sub GeneratePdf(baseUrl As String, query As String, filePath As String)
End Interface
$vbLabelText   $csharpLabel

Schnittstelle implementieren

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}");
    }
}
Imports IronPdf
Imports System
Imports System.Web

' Implement the PDF generation interface
Public Class IronPdfService
	Implements IPdfService

	Public Sub GeneratePdf(ByVal baseUrl As String, ByVal query As String, ByVal filePath As String)
		License.LicenseKey = "Your-License-Key" ' Set the IronPDF license key
		Dim encodedQuery As String = HttpUtility.UrlEncode(query) ' Encode the query string
		Dim fullUrl As String = $"{baseUrl}?query={encodedQuery}" ' Construct the full URL
		Dim renderer = New ChromePdfRenderer() ' Create a PDF renderer
		Dim 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}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Dienstleistung registrieren

Konfigurieren Sie in Ihrer Program.cs Klasse die Abhängigkeitsinjektion:

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();
    }
}
Public Class MyController
	Inherits Controller

	Private ReadOnly _pdfService As IPdfService

	Public Sub New(ByVal pdfService As IPdfService)
		_pdfService = pdfService
	End Sub

	Public Function GeneratePdf() As IActionResult
		Dim baseUrl As String = "https://ironpdf.com/"
		Dim query As String = "Hello World from IronPDF !"
		Dim filePath As String = "Demo.pdf"

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

		Return View()
	End Function
End Class
$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 bei 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 Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO ...

Weiterlesen

Iron Support Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an