跳過到頁腳內容
.NET幫助

Microsoft.Extensions .DependencyInjection .NET 9(PDF使用說明)

Microsoft.Extensions.DependencyInjection是 Microsoft .NET提供的一個強大的程式庫,用於簡化依賴注入 (DI),這是一種軟體設計模式,可促進應用程式的鬆散耦合並增強其可測試性。 依賴注入通常使用.NET Core內建的依賴注入容器或 Autofac 和 Unity 等函式庫來實作。 依賴注入(DI)是指將依賴項(類別需要的物件)注入到類別中,而不是由類別建立其依賴項。 這通常是透過建構函數、方法或屬性注入來實現的。

Microsoft.Extensions.DependencyInjection .NET 6(處理 PDF):圖 1 - Microsoft.Extensions.DependencyInjectionName 文件

依賴注入容器

1.服務註冊:依賴項在 DI 容器中註冊,通常位於應用程式的組合根。 這些註冊資訊規定了容器應該如何建立和管理依賴項。

2.依賴項解析:當元件請求依賴項時,DI 容器會透過建立使用擴充方法的已註冊類型的實例來解析依賴項。

依賴注入的類型

*建構函式註入:*透過類別的建構函式為類別提供已註冊的服務,這是最常見且推薦的依賴注入形式。 方法注入:**服務被解析並作為參數傳遞給方法。 *屬性注入:可以將單例服務或具有限定生命週期的服務指派給類別屬性。 然而,這種方法不太常見,而且通常被認為不如建構函數注入,因為它可能會引入隱藏的依賴項。

理解依賴注入 (DI) 中的生命週期:作用域、瞬態和單例

1.作用域:作用域依賴項在每個請求或生命週期範圍內建立一次,這表示容器在單一請求或操作中提供相同的實例。 這種一致性在 Web 應用程式中尤其有用,因為作用域依賴項有助於在整個 Web 請求過程中保持穩定的依賴關係。 2.瞬態:瞬態相依性每次從容器請求時都會實例化。 這意味著每當需要時都會產生一個瞬態依賴項的新實例。 通常,瞬態依賴項用於輕量級、無狀態的服務或元件。 3.單例:單例依賴項僅實例化一次,並在應用程式的整個生命週期內共享。這確保了在應用程式運行期間,所有請求都使用同一個單例相依性實例。 單例依賴通常用於有狀態的服務或元件,這些服務或元件需要在整個應用程式中普遍可存取。

正在安裝Microsoft.Extensions.DependencyInjection 套件

要開始在.NET Core專案中使用依賴注入,首先需要安裝Microsoft.Extensions.DependencyInjection 套件。 這可以透過 Visual Studio 中的NuGet套件管理器控制台使用以下命令完成:

Install-Package Microsoft.Extensions.DependencyInjection

螢幕截圖

Microsoft.Extensions.DependencyInjection .NET 6(處理 PDF):圖 2 - 在終端機中輸入命令以安裝該套件

範例:基本依賴注入

在這個例子中,讓我們建立一個範例應用程式(控制台應用程式),其中我們將利用服務提供者來解析服務並將其註入到我們的程式中。

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

這個程式碼片段創建了一個用於發送訊息的介面 IMessageService,就像一個關於如何發送訊息的契約。 ConsoleMessageService 類別透過使用 Console.WriteLine 傳送訊息來實現此介面。 這種分離使得發送訊息的概念可以獨立於發送方式而改變,從而使系統靈活且易於管理。

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

這段程式碼設定了一個服務提供者來管理服務。 它將ConsoleMessageService註冊為IMessageService的實現,使其可以在任何需要的地方注入。 然後,該方法從服務提供者中擷取IMessageService實例,並使用該實例向控制台傳送訊息。

輸出:程式列印字串訊息"你好,來自依賴注入!"

Microsoft.Extensions.DependencyInjection .NET 6(處理 PDF):圖 3 - 上述程式碼的控制台輸出

IronPDF:C# PDF 庫

IronPDF是一個功能強大的 C# 庫,它簡化了複雜的 PDF 生成過程,提供了廣泛的 PDF 操作功能,包括從 HTML生成 PDF、向 PDF 添加文字使用圖像編輯 PDF 、建立安全文件等等。

Microsoft.Extensions.DependencyInjection .NET 6(處理 PDF):圖 4 - Microsoft.Extensions.DependencyInjection C# 範例(開發人員的工作原理):圖 2 - IronPDF@@--IMG-174-EGEG--@

使用IronPDF和依賴注入

若要將IronPDF庫整合到利用依賴注入功能和 Microsoft.Extensions.DependencyInjection 擴充方法的.NET Core應用程式中,您可以按以下步驟操作:

  1. 建立一個介面來定義您的 PDF 生成服務。
  2. 實作介面。
  3. 利用擴充方法在依賴注入容器中註冊服務。
  4. 根據需要將服務注入到您的應用程式中。

定義介面

建立用於定義 PDF 生成服務的介面。

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

實現介面

使用IronPDF實作建立 PDF 檔案的介面。

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

註冊服務

在你的 Program.cs 類別中,組態依賴注入:

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

此設定透過實作IPdfService介面和IronPdfService來解決依賴關係,從而建立用於 PDF 產生的單例服務類型。 然後在整個應用程式中引用它,以確保生成 PDF 的功能一致。

用法

IPdfService注入到您的控制器或服務中並使用它:

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

此設定可確保IronPdfService由 Microsoft Extensions Dependency Injection 容器建立和管理。 您可以為IPdfService介面提供替代實現,從而輕鬆替換預設的 PDF 生成服務,而無需更改使用代碼。

PDF檔案的螢幕截圖

Microsoft.Extensions.DependencyInjection .NET 6(處理 PDF):圖 5 - 使用 Microsoft Extensions Dependency Injection 容器與IronPDF結合使用的範例輸出 @

結論

Microsoft.Extensions.DependencyInjection 是.NET 6 中用於實現依賴注入的強大工具,它能促進應用程式的鬆散耦合並增強其可測試性。 透過整合功能豐富的 C# 庫IronPDF,開發人員可以輕鬆產生全面的 PDF 文檔,且只需付出極少的努力。 IronPDF的授權許可現已開放。

常見問題解答

Microsoft.Extensions.DependencyInjection 在 .NET 6 中的作用是什麼?

Microsoft.Extensions.DependencyInjection 在 .NET 6 中用於實現依賴注入(Dependency Injection),這是一種設計模式,透過 DI 容器管理服務的生命週期和依賴關係來幫助創建鬆耦合的應用程式。

依賴注入如何增強應用程式的可測試性?

依賴注入透過允許將依賴注入到一個類中來增強可測試性,這使得在測試期間更容易替換模擬對象而非真實實現。

在 .NET 應用程式中使用依賴注入的好處是什麼?

.NET 應用程式中使用依賴注入的好處包括改進代碼的可維護性、可擴展性以及能夠在運行時輕鬆管理和配置依賴。

如何在 .NET Core 應用程式中實施依賴注入?

在 .NET Core 應用程式中,依賴注入是通過在應用程式啟動期間在 DI 容器中配置服務,並根據需要將它們注入到構造函數或方法中來實施的。

如何在 .NET Core 應用程式中將 HTML 轉換為 PDF?

您可以在 .NET Core 應用程式中使用 IronPDF 方法來將 HTML 轉換為 PDF,例如用於 HTML 字串的 RenderHtmlAsPdf 或用於 HTML 文件的 RenderHtmlFileAsPdf

依賴注入中服務的不同生命週期是什麼,它們如何影響應用程式行為?

依賴注入中的服務生命週期包括 Scoped、Transient 和 Singleton。Scoped 服務每個請求創建一次,Transient 服務每次請求都創建,Singleton 服務僅創建一次並在整個應用中共享。

在 .NET 6 中,Dependency Injection 用於實現依賴注入(DI),這種設計模式通過 DI 容器管理服務的生命週期和依賴,幫助創建鬆耦合的應用程式。

要在 .NET Core 項目中使用依賴注入集成 C# PDF 庫(如 IronPDF),您需要為 PDF 服務創建一個接口,實施它,將該服務註冊到 DI 容器中,並根據需要將其注入到類中。

安裝 Microsoft.Extensions.DependencyInjection 套件的過程是什麼?

可以使用 Visual Studio 的 NuGet 包管理控制台安裝 Microsoft.Extensions.DependencyInjection 套件,命令為:Install-Package Microsoft.Extensions.DependencyInjection

如何使用 IronPDF 和依賴注入來生成 PDF?

可以使用 IronPDF 配合依賴注入來生成 PDF,方法是設置一個 PDF 服務接口,用 IronPDF 方法實施它,並將其註冊到 DI 容器。然後可以注入這個服務並使用它從 URL 或 HTML 內容生成 PDF。

可以在不更改消費代碼的情況下在 DI 設置中替換 C# PDF 庫嗎?

是的,您可以通過實施 PDF 服務接口的替代版本來在 DI 設置中替換 C# PDF 庫,這樣可以在不更改消費代碼的情況下切換庫。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me