.NET 幫助

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

Microsoft.Extensions.DependencyInjection 是由 Microsoft .NET 提供的一個強大庫,可促進依賴注入 (DI),這是一種軟體設計模式,能促進鬆散耦合並提升應用程式的可測試性。 DI 通常使用 .NET Core 內建的 DI 容器或像 Autofac 和 Unity 這樣的庫來實現。 DI 涉及將依賴項(類所需的對象)注入到類中,而不是讓類自行創建其依賴項。 這通常是通過構造函數、方法或屬性注入來完成的。

Microsoft.Extensions.DependencyInjection .NET 6(使用 PDF):圖 1 - Microsoft.Extensions.DependencyInjectionName 文檔

依賴注入容器

  1. 服務註冊:相依關係是在 DI 容器中註冊的,通常位於應用程式的組合根。 這些註冊指定了容器應如何創建和管理相依性。

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

依賴注入的類型

  • 構造函數注入:註冊服務通過其構造函數提供給類,這是最常見和推薦的依賴注入(DI)形式。
  • 方法注入:服務被解析並作為參數傳遞給方法。 屬性注入:單例服務或具有範圍生命週期的服務被分配給該類別。
  • 屬性注入:單例服務或具有範圍生命週期的服務可以分配給類的屬性。 然而,這種方法較不常見,通常被認為不如構造函數注入,因為它可能引入隱藏的依賴。

了解依賴注入 (DI) 中的生命周期:Scoped、Transient 和 Singleton

  1. 範圍:範圍依賴性是在每個請求或生命週期範圍中創建一次,這意味著容器在單個請求或操作中提供相同的實例。 這種一致性在網路應用中特別有用,其中範圍依賴性有助於在整個網路請求中維護穩定的依賴性。

  2. 瞬態:每當從容器中請求瞬態依賴項時,它們都會被實例化。 這意味著在需要時會生成一個瞬態依賴的新實例。 通常,暫時性依賴用於輕量級、無狀態的服務或元件。

  3. 單例:單例依賴項只會被實例化一次,並在整個應用程式的生命週期中共享。這確保在應用程式的整個運行期間,所有請求都使用同一個單例依賴項的實例。 單例依賴通常用於狀態服務或需要在整個應用程式中普遍可訪問的組件。

安裝 Microsoft.Extensions.DependencyInjection 套件

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

Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.DependencyInjection

截圖

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

範例:基本依賴注入

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

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);
    }
}

這段代碼片段創建了一個名為 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!");
    }
}

此程式碼設定serviceProvider來管理工具。 它添加了一個ConsoleMessageService工具。 然後,它從serviceProvider中檢索IMessageService工具,並使用它將訊息「Hello, Dependency Injection!」發送到控制台。

輸出:程式打印字串訊息 "Hello, From Dependency Injection!"

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

使用 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);
}

實作介面

使用 IronPDF 實現介面來創建 PDF 檔案。

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

註冊服務

在您的 Program.cs 類中,配置依賴注入:

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

此設置將透過使用 IronPdfService 實現 IPdfService 介面來解決相依性,並建立 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";
        _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();
    }
}

此設置確保 IronPdfService 由 Microsoft Extensions 的相依性注入容器創建和管理。 您可以通過為 IPdfService 介面提供替代實現,輕鬆替換預設的 PDF 生成服務,而不需要更改使用該服務的代碼。

PDF 檔案的螢幕截圖

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

結論

Microsoft.Extensions.DependencyInjection 是 .NET 6 中一個強大的工具,用於實現依賴注入,這促進了鬆耦合並增強了應用程式的可測試性。 通過整合IronPDF這個功能豐富的C#程式庫,開發人員可以輕鬆生成完整的PDF文檔,只需極少的努力。 IronPDF 的授權 可供使用。

Chipego
奇佩戈·卡林达
軟體工程師
Chipego 擁有天生的傾聽技能,這幫助他理解客戶問題,並提供智能解決方案。他在獲得信息技術理學學士學位後,于 2023 年加入 Iron Software 團隊。IronPDF 和 IronOCR 是 Chipego 專注的兩個產品,但隨著他每天找到新的方法來支持客戶,他對所有產品的了解也在不斷增長。他喜歡在 Iron Software 的協作生活,公司內的團隊成員從各自不同的經歷中共同努力,創造出有效的創新解決方案。當 Chipego 離開辦公桌時,他常常享受讀好書或踢足球的樂趣。
< 上一頁
Junit Java(如何為開發者工作)
下一個 >
Ninject .NET Core(它如何為開發人員工作)