.NET 帮助

Microsoft.Extensions .DependencyInjection .NET 6 (Working With PDF)

发布 2024年八月13日
分享:

Microsoft.Extensions.DependencyInjection是Microsoft .NET提供的一个强大库,用于实现依赖注入。(DI)在.NET、Java、Python 或 Node js 中,".NET "是一种软件设计模式,可促进松耦合并提高应用程序的可测试性。 DI 通常使用.NET Core如 Autofac 和 Unity 等内置 DI 容器或库。 DI 涉及注入依赖关系(一个类需要的对象)到一个类中,而不是让类创建它的依赖项。 这通常是通过构造函数、方法或属性注入来实现的。

Microsoft.Extensions.DependencyInjection .NET 6(处理PDF): 图1 - Microsoft.Extensions.DependencyInjectionName 文档

依赖注入容器

  1. 服务注册: 依赖关系在 DI 容器中注册,通常位于应用程序的组成根目录。 这些注册说明了容器应如何创建和管理依赖关系。

  2. 依赖关系解析: 当组件请求依赖关系时,DI 容器会通过创建使用扩展方法的注册类型实例来解析依赖关系。

依赖注入的类型

  • 构造器注入: 通过类的构造器为类提供注册服务,这是最常见也是最推荐的 DI 形式。
  • 方法注入: 服务被解析并作为参数传递给方法。 属性注入:将单例服务或具有作用域生命周期的服务分配给类。
  • 属性注入: 单例服务或具有作用域生命周期的服务可分配给类属性。 然而,这种方法并不常见,通常被认为不如构造器注入,因为它可能会引入隐藏的依赖关系。

了解依赖注入(DI)中的生命周期:作用域、瞬态和单例

  1. 作用域: 作用域依赖关系在每个请求或生命周期作用域中创建一次,这意味着容器在单个请求或操作中提供相同的实例。 这种一致性在网络应用程序中尤其有用,在网络应用程序中,作用域依赖关系有助于在整个网络请求过程中保持稳定的依赖关系。

  2. 瞬时依赖关系: 瞬时依赖关系在每次从容器请求时都会被实例化。 这意味着只要有需要,就会生成一个新的瞬时依赖关系实例。 瞬态依赖关系通常用于轻量级、无状态的服务或组件。

  3. 单例: 单例依赖关系仅实例化一次,并在应用程序的整个生命周期内共享。这可确保在应用程序的整个生命周期内,所有请求都使用同一个依赖关系实例。 对于需要在整个应用程序中普遍访问的有状态服务或组件,通常会采用单例依赖关系。

安装 Microsoft.Extensions.DependencyInjection 软件包

要开始在 .NET Core 项目中使用依赖注入,首先需要安装Microsoft.Extensions.DependencyInjection 包. 可以通过 Visual Studio 中的 NuGet 包管理器控制台,使用以下代码完成翻译:

Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.DependencyInjection
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

屏幕截图

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);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

代码片段创建了一个名为 IMessageService 的消息发送规则。这就像是为如何发送消息制定了一个计划。 然后,通过使用 Console.WriteLine 发送消息,使 ConsoleMessageService 类遵循这一规则。 这种设置将发送消息的想法与实际过程分离开来,便于日后在需要时更改消息的发送方式。 它有助于在应用程序中保持消息系统的有序性并便于管理。

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
VB   C#

该代码设置了一个 serviceProvider 来管理工具。 它增加了一个ConsoleMessageService工具。 然后,它从serviceProvider检索IMessageService工具,并使用它发送信息 "你好,依赖注入"。!"到控制台。

输出:程序打印字符串信息 "Hello, From Dependency Injection!"

Microsoft.Extensions.DependencyInjection .NET 6(处理PDF):图3 - 上述代码的控制台输出

IronPDF:C# PDF 库

IronPDF是一个强大的 C# 库,简化了复杂的 PDF 生成过程,提供了广泛的 PDF 操作功能,包括生成能力。HTML 创建的 PDF 文件添加操作文本到 PDF用图像编辑 PDF此外,还需要翻译《.NET、Java、Python 或 Node js》、《创建安全文档》等内容。

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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

实现界面

使用 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}");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

注册服务

在 Program.cs 类中,配置依赖注入:

builder.Services.AddSingleton<IPdfService, IronPdfService>();
builder.Services.AddSingleton<IPdfService, IronPdfService>();
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

该设置通过使用 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();
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

此设置可确保 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 的授权许可可用。

< 前一页
Junit Java(开发人员指南)
下一步 >
Ninject .NET Core(它如何为开发人员工作)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >