.NET 帮助

Microsoft.Extensions.DependencyInjection .NET 6(处理PDF)

发布 2024年八月13日
分享:

Microsoft.Extensions.DependencyInjection 是Microsoft .NET提供的一个强大库,用于实现依赖注入。 (DI)一种软件设计模式,可以促进松耦合并提高应用程序的可测试性。DI 通常使用 .NET 核心内置的DI容器或类似Autofac和Unity的库。DI涉及注入依赖项 (一个类需要的对象) 而不是由类本身创建其依赖项,这是通过构造函数、方法或属性注入来完成的。

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

依赖注入容器

  1. 服务注册: 通常在应用程序的组合根部,依赖关系被注册到DI容器中。这些注册指定了容器应如何创建和管理依赖关系。

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

依赖注入的类型

  • 构造函数注入: 注册的服务通过类的构造函数提供,这是最常见和推荐的DI形式。
  • 方法注入: 服务被解析并作为参数传递给方法。

  • 属性注入: 单例服务或具有特定生命周期的服务可以分配给类属性。然而,这种方法较少使用,通常被认为不如构造函数注入,因为它可能引入隐藏的依赖项。

理解依赖注入中的生命周期 (DI): 作用域,瞬时,单例

  1. 作用域 (Scoped): 作用域依赖项在每次请求或生命周期范围内创建一次,这意味着在单个请求或操作中,容器提供相同的实例。这种一致性在Web应用程序中特别有用,因为作用域依赖项有助于在整个Web请求期间保持稳定的依赖关系。

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

  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
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的发送消息规则。这就像设置计划,规定如何发送消息。然后,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!");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

这段代码设置了一个serviceProvider来管理工具。它向其中添加了一个ConsoleMessageService工具。然后,它从serviceProvider中检索IMessageService工具,并用它发送消息“Hello, Dependency Injection”。!到控制台。

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

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

IronPDF:C# PDF Library

IronPDF 是一个强大的 C# 库,简化了复杂的 PDF 生成过程,提供了广泛的 PDF 操作功能,包括生成能力。 HTML 创建的 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
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 依赖注入容器创建和管理。您可以轻松地替代默认的 PDF 生成服务,只需为 IPdfService 接口提供另一种实现,而不需要修改使用该服务的代码。

PDF 文件的截图

Microsoft.Extensions.DependencyInjection .NET 6(处理PDF):图5 - 使用Microsoft Extensions Dependency Injection容器与IronPDF结合的示例输出

结论

Microsoft.Extensions.DependencyInjection 是 .NET 6 中实现依赖注入的强大工具,它促进了松耦合并增强了应用程序的可测试性。通过集成 IronPDF,这个功能丰富的 C# 库,开发人员可以轻松 生成 可用。

下一步 >
Ninject .NET Core(它如何为开发人员工作)

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

免费NuGet下载 总下载量: 10,731,156 查看许可证 >