Ir para o conteúdo do rodapé
AJUDA DO .NET

Microsoft.Extensions .DependencyInjection .NET 9 (Trabalhando com PDF)

Microsoft.Extensions.DependencyInjection é uma poderosa biblioteca fornecida pelo Microsoft .NET para facilitar a Injeção de Dependência (DI), um padrão de projeto de software que promove o baixo acoplamento e aprimora a testabilidade em aplicativos. A injeção de dependência (DI) geralmente é implementada usando o contêiner de DI integrado do .NET Core ou bibliotecas como Autofac e Unity. A Injeção de Dependência (DI) envolve injetar dependências (objetos que uma classe precisa) em uma classe, em vez da classe criar suas próprias dependências. Isso geralmente é feito por meio de injeção de construtor, método ou propriedade.

Microsoft.Extensions.DependencyInjection .NET 6 (Trabalhando com PDF): Figura 1 - Documentação do Microsoft.Extensions.DependencyInjectionName

Contêiner de Injeção de Dependência

  1. Registro de serviço: As dependências são registradas em um contêiner de injeção de dependência (DI), normalmente na raiz de composição do aplicativo. Esses registros especificam como o contêiner deve criar e gerenciar as dependências.

  2. Resolução de Dependências: Quando um componente solicita uma dependência, o contêiner de Injeção de Dependência (DI) resolve a dependência criando uma instância de um tipo registrado que utiliza um método de extensão.

Tipos de Injeção de Dependência

  • Injeção de Construtor: Os serviços registrados são fornecidos a uma classe por meio de seu construtor, que é a forma mais comum e recomendada de Injeção de Dependência.
  • Injeção de método: Os serviços são resolvidos e passados ​​como parâmetros para um método.
  • Injeção de propriedades: Serviços singleton ou serviços com um tempo de vida definido podem ser atribuídos a propriedades de classe. No entanto, essa abordagem é menos comum e frequentemente considerada inferior à injeção de dependência por construtor, pois pode introduzir dependências ocultas.

Entendendo os tempos de vida na Injeção de Dependência (DI): Escopo, Transiente e Singleton

  1. Com escopo: Dependências com escopo são criadas uma vez por solicitação ou escopo de vida útil, o que significa que o contêiner fornece a mesma instância dentro de uma única solicitação ou operação. Essa consistência é particularmente útil em aplicações web, onde dependências com escopo ajudam a manter uma dependência estável ao longo de uma requisição web.
  2. Transitório: Dependências transitórias são instanciadas cada vez que são solicitadas ao contêiner. Isso implica que uma nova instância de uma dependência transitória é gerada sempre que necessário. Normalmente, as dependências transitórias são usadas para serviços ou componentes leves e sem estado.
  3. Singleton: Dependências singleton são instanciadas apenas uma vez e compartilhadas durante toda a vida útil da aplicação. Isso garante que a mesma instância de uma dependência singleton seja usada para todas as requisições durante a execução da aplicação. As dependências singleton são normalmente empregadas para serviços ou componentes com estado que precisam ser universalmente acessíveis em toda a aplicação.

Instalando o pacote Microsoft.Extensions.DependencyInjection

Para começar a usar a injeção de dependência em um projeto .NET Core , primeiro você precisa instalar o pacote Microsoft.Extensions.DependencyInjection . Isso pode ser feito através do Console do Gerenciador de Pacotes NuGet no Visual Studio com o seguinte comando:

Install-Package Microsoft.Extensions.DependencyInjection

Captura de tela

Microsoft.Extensions.DependencyInjection .NET 6 (Trabalhando com PDF): Figura 2 - Digite o comando no terminal para instalar o pacote

Exemplo: Injeção de Dependência Básica

Neste exemplo, vamos criar um aplicativo de exemplo (aplicativo de console) no qual utilizaremos um provedor de serviços para resolver serviços e injetá-los em nosso programa.

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
    }
}
Imports Microsoft.Extensions.DependencyInjection
Imports System

' Define a service interface
Public Interface IMessageService
	Sub SendMessage(ByVal message As String)
End Interface

' Implement the service interface
Public Class ConsoleMessageService
	Implements IMessageService

	Public Sub SendMessage(ByVal message As String) Implements IMessageService.SendMessage
		Console.WriteLine(message) ' Output the message to the console
	End Sub
End Class
$vbLabelText   $csharpLabel

O trecho de código cria uma interface IMessageService para envio de mensagens, como um contrato sobre como as mensagens devem ser enviadas. A classe ConsoleMessageService implementa esta interface usando Console.WriteLine para enviar mensagens. Essa separação permite que o conceito de envio de mensagens seja alterado independentemente da forma como são enviadas, tornando o sistema flexível e gerenciável.

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!");
    }
}
Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a service provider
		Dim serviceProvider = (New ServiceCollection()).AddTransient(Of IMessageService, ConsoleMessageService)().BuildServiceProvider()

		' Resolve the service
		Dim messageService = serviceProvider.GetRequiredService(Of IMessageService)()

		' Use the service to send a message
		messageService.SendMessage("Hello, From Dependency Injection!")
	End Sub
End Class
$vbLabelText   $csharpLabel

Este código configura um provedor de serviços para gerenciar serviços. Ele registra o ConsoleMessageService como a implementação do IMessageService , tornando-o disponível para ser injetado onde for necessário. O método Main recupera uma instância de IMessageService do provedor de serviços e a utiliza para enviar uma mensagem ao console.

Saída: O programa imprime a mensagem "Olá, da Injeção de Dependência!"

Microsoft.Extensions.DependencyInjection .NET 6 (Trabalhando com PDF): Figura 3 - Saída do console do código acima

IronPDF: Biblioteca PDF em C

IronPDF é uma poderosa biblioteca para C# que simplifica o complexo processo de geração de PDFs, oferecendo uma ampla gama de recursos para manipulação de PDFs, incluindo a capacidade de gerar PDFs a partir de HTML , adicionar texto a PDFs e editar PDFs com imagens , criar documentos seguros e muito mais.

Microsoft.Extensions.DependencyInjection .NET 6 (Trabalhando com PDF): Figura 4 - Microsoft.Extensions.DependencyInjection Exemplo em C# (Como funciona para desenvolvedores): Figura 2 - IronPDF

Utilizando IronPDF com Injeção de Dependência

Para integrar a biblioteca IronPDF em um aplicativo .NET Core , aproveitando os recursos de injeção de dependência e os métodos de extensão com Microsoft.Extensions.DependencyInjection, você pode proceder da seguinte forma:

  1. Crie uma interface para definir seu serviço de geração de PDFs.
  2. Implemente a interface.
  3. Utilize métodos de extensão para registrar o serviço no contêiner de injeção de dependência.
  4. Incorpore o serviço em sua aplicação conforme necessário.

Definir interface

Crie uma interface para definir seu serviço de geração de PDFs.

public interface IPdfService
{
    void GeneratePdf(string baseUrl, string query, string filePath);
}
public interface IPdfService
{
    void GeneratePdf(string baseUrl, string query, string filePath);
}
Public Interface IPdfService
    Sub GeneratePdf(baseUrl As String, query As String, filePath As String)
End Interface
$vbLabelText   $csharpLabel

Implementar interface

Implemente a interface usando o IronPDF para criar o arquivo 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}");
    }
}
Imports IronPdf
Imports System
Imports System.Web

' Implement the PDF generation interface
Public Class IronPdfService
	Implements IPdfService

	Public Sub GeneratePdf(ByVal baseUrl As String, ByVal query As String, ByVal filePath As String)
		License.LicenseKey = "Your-License-Key" ' Set the IronPDF license key
		Dim encodedQuery As String = HttpUtility.UrlEncode(query) ' Encode the query string
		Dim fullUrl As String = $"{baseUrl}?query={encodedQuery}" ' Construct the full URL
		Dim renderer = New ChromePdfRenderer() ' Create a PDF renderer
		Dim 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}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Serviço de Registro

Na sua classe Program.cs, configure a injeção de dependência:

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

Essa configuração resolve as dependências implementando a interface IPdfService com IronPdfService , estabelecendo um tipo de serviço singleton para geração de PDF. Em seguida, ele é referenciado em todo o aplicativo, garantindo uma funcionalidade consistente para a geração de PDFs.

Uso

Injete o IPdfService em seu controlador ou serviço e utilize-o:

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();
    }
}
Public Class MyController
	Inherits Controller

	Private ReadOnly _pdfService As IPdfService

	Public Sub New(ByVal pdfService As IPdfService)
		_pdfService = pdfService
	End Sub

	Public Function GeneratePdf() As IActionResult
		Dim baseUrl As String = "https://ironpdf.com/"
		Dim query As String = "Hello World from IronPDF !"
		Dim filePath As String = "Demo.pdf"

		' Use the injected PDF service to generate a PDF
		_pdfService.GeneratePdf(baseUrl, query, filePath)

		Return View()
	End Function
End Class
$vbLabelText   $csharpLabel

Essa configuração garante que o IronPdfService seja criado e gerenciado pelo contêiner de Injeção de Dependência das Extensões da Microsoft. Você pode substituir facilmente o serviço padrão de geração de PDF, oferecendo uma implementação alternativa para a interface IPdfService , tudo isso sem alterar o código que utiliza o serviço.

Captura de tela do arquivo PDF

Microsoft.Extensions.DependencyInjection .NET 6 (Trabalhando com PDF): Figura 5 - Exemplo de saída usando o contêiner de Injeção de Dependência do Microsoft Extensions em conjunto com o IronPDF

Conclusão

Microsoft.Extensions.DependencyInjection é uma ferramenta poderosa no .NET 6 para implementar injeção de dependência, o que promove baixo acoplamento e melhora a testabilidade em aplicações. Ao integrar o IronPDF, uma biblioteca C# rica em recursos, os desenvolvedores podem gerar facilmente documentos PDF abrangentes com o mínimo esforço. O licenciamento do IronPDF está disponível.

Perguntas frequentes

Qual é o papel do Microsoft.Extensions.DependencyInjection no .NET 6?

O Microsoft.Extensions.DependencyInjection no .NET 6 é usado para implementar a Injeção de Dependência, um padrão de projeto que ajuda na criação de aplicações com baixo acoplamento, gerenciando o ciclo de vida dos serviços e as dependências por meio de um contêiner de Injeção de Dependência.

Como a Injeção de Dependência pode melhorar a testabilidade em aplicações?

A Injeção de Dependência aprimora a testabilidade, permitindo que dependências sejam injetadas em uma classe, facilitando a substituição de implementações reais por objetos simulados durante os testes.

Quais são os benefícios de usar Injeção de Dependência em aplicações .NET?

Os benefícios de usar Injeção de Dependência em aplicações .NET incluem melhor manutenção do código, escalabilidade e a capacidade de gerenciar e configurar dependências facilmente em tempo de execução.

Como implementar Injeção de Dependência em uma aplicação .NET Core?

Em uma aplicação .NET Core, a Injeção de Dependência é implementada configurando serviços no contêiner de Injeção de Dependência durante a inicialização da aplicação e injetando-os em construtores ou métodos conforme necessário.

Como converter HTML para PDF em uma aplicação .NET Core?

É possível converter HTML para PDF em uma aplicação .NET Core usando métodos do IronPDF, como RenderHtmlAsPdf para strings HTML ou RenderHtmlFileAsPdf para arquivos HTML.

Quais são os diferentes tempos de vida dos serviços na Injeção de Dependência e como eles afetam o comportamento da aplicação?

Os tempos de vida dos serviços na Injeção de Dependência são: Escopado, Transitório e Singleton. Serviços Escopados são criados uma vez por requisição, serviços Transitórios são criados a cada requisição e serviços Singleton são criados uma única vez e compartilhados por toda a aplicação.

Como integrar uma biblioteca PDF em C# em um projeto .NET Core usando Injeção de Dependência?

Para integrar uma biblioteca PDF em C#, como o IronPDF, em um projeto .NET Core usando Injeção de Dependência, você precisa criar uma interface para os serviços de PDF, implementá-la, registrar o serviço no contêiner de Injeção de Dependência e injetá-lo em suas classes conforme necessário.

Qual é o processo para instalar o pacote Microsoft.Extensions.DependencyInjection?

O pacote Microsoft.Extensions.DependencyInjection pode ser instalado usando o Console do Gerenciador de Pacotes NuGet no Visual Studio com o comando: Install-Package Microsoft.Extensions.DependencyInjection .

Como o IronPDF pode ser usado com Injeção de Dependência para gerar PDFs?

O IronPDF pode ser usado com Injeção de Dependência configurando uma interface de serviço PDF, implementando-a com os métodos do IronPDF e registrando-a no contêiner de Injeção de Dependência. O serviço pode então ser injetado e usado para gerar PDFs a partir de URLs ou conteúdo HTML.

É possível substituir uma biblioteca PDF em C# em uma configuração de injeção de dependência sem alterar o código que a utiliza?

Sim, você pode substituir uma biblioteca PDF em C# em uma configuração de injeção de dependência implementando uma alternativa à interface usada para serviços de PDF, permitindo que você troque de biblioteca sem alterar o código que a utiliza.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim