.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)中的生命周期:作用域、瞬态和单例

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

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

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

安装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
$vbLabelText   $csharpLabel

屏幕截图

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
$vbLabelText   $csharpLabel

代码片段创建了一个名为 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
$vbLabelText   $csharpLabel

此代码设置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);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

实现界面

使用 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
$vbLabelText   $csharpLabel

注册服务

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

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

该设置通过使用 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
$vbLabelText   $csharpLabel

此设置可确保 IronPdfService 由 Microsoft Extensions 依赖注入容器创建和管理。 通过提供 IPdfService 接口的替代实现,您可以毫不费力地替代默认的 PDF 生成服务,而无需更改消费代码。

PDF 文件截图

Microsoft.Extensions.DependencyInjection .NET 6(与 PDF 一起工作):图 5 - 使用 Microsoft 扩展依赖注入容器结合 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(它如何为开发人员工作)