AYUDA .NET

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajar con PDF)

Actualizado agosto 13, 2024
Compartir:

Microsoft.Extensions.DependencyInjection es una potente biblioteca proporcionada por Microsoft .NET para facilitar la inyección de dependencias (DI)un patrón de diseño de software que fomenta el acoplamiento flexible y mejora la comprobabilidad de las aplicaciones. La DI se aplica a menudo mediante .NET Contenedor DI integrado en Core o bibliotecas como Autofac y Unity. DI implica inyectar dependencias (objetos que necesita una clase) en una clase en lugar de que la clase cree sus dependencias. Esto se hace típicamente a través de un constructor, método o inyección de propiedad.

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajar con PDF): Figura 1 - Documentación Microsoft.Extensions.DependencyInjectionName

Contenedor de inyección de dependencia

  1. Registro de servicios: Las dependencias se registran en un contenedor DI, normalmente en la raíz de composición de la aplicación. Estos registros especifican cómo el contenedor debe crear y gestionar las dependencias.

  2. Resolución de dependencias: Cuando un componente solicita una dependencia, el contenedor DI resuelve la dependencia creando una instancia de un tipo registrado que utiliza un método de extensión.

Tipos de inyección de dependencia

  • Inyección en el constructor: Los servicios registrados se proporcionan a una clase a través de su constructor, que es la forma más común y recomendada de DI.
  • Inyección de métodos: Los servicios se resuelven y se pasan como parámetros a un método. Inyección de propiedades: Se asignan a la clase servicios singleton o servicios con un scoped lifetime.

  • Inyección de propiedades: Los servicios Singleton o los servicios con un tiempo de vida limitado pueden ser asignados a las propiedades de la clase. Sin embargo, este enfoque es menos común y a menudo se considera inferior a la inyección de constructores porque puede introducir dependencias ocultas.

Comprender los tiempos de vida en la inyección de dependencia (DI): Scoped, Transient y Singleton

  1. *Scoped: las dependencias *Scoped se crean una vez por solicitud o ámbito de vida, lo que significa que el contenedor proporciona la misma instancia dentro de una única solicitud u operación. Esta consistencia es particularmente útil en aplicaciones web, donde las dependencias de ámbito ayudan a mantener una dependencia estable a lo largo de una petición web.

  2. Transitorias: Las dependencias transitorias se instancian cada vez que se solicitan al contenedor. Esto implica que se genera una nueva instancia de una dependencia transitoria cada vez que se necesita. Normalmente, las dependencias transitorias se utilizan para servicios o componentes ligeros y sin estado.

  3. Singleton: Las dependencias singleton se instancian una sola vez y se comparten durante toda la vida útil de la aplicación. Esto garantiza que se utilice la misma instancia de una dependencia singleton para todas las solicitudes durante toda la duración de la aplicación. Las dependencias Singleton se emplean normalmente para servicios o componentes con estado que deben ser accesibles universalmente en toda la aplicación.

Instalación del paquete Microsoft.Extensions.DependencyInjection

Para empezar a utilizar la inyección de dependencias en un proyecto .NET Core, primero debe instalar Paquete Microsoft.Extensions.DependencyInjection. Esto se puede hacer a través de la NuGet Package Manager Console en Visual Studio con el siguiente código:

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

Captura de pantalla

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajar con PDF): Figura 2 - Escriba el comando en el terminal para instalar el paquete

Ejemplo: Inyección de dependencia básica

En este ejemplo, vamos a crear una aplicación de ejemplo (aplicación de consola) en el que utilizaremos un proveedor de servicios para resolver servicios e inyectarlos en nuestro programa.

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#

El fragmento de código crea una regla para enviar mensajes llamada IMessageService. Es como establecer un plan sobre cómo deben enviarse los mensajes. Entonces, se hace que la clase ConsoleMessageService siga esta regla usando Console.WriteLine para enviar mensajes. Esta configuración separa la idea de enviar mensajes del proceso real, lo que facilita cambiar cómo se envían los mensajes más adelante si es necesario. Ayuda a mantener el sistema de mensajería organizado y fácil de gestionar en la aplicación.

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#

Este código configura un serviceProvider para gestionar herramientas. Le añade una herramienta ConsoleMessageService. A continuación, recupera la herramienta IMessageService de serviceProvider y la utiliza para enviar el mensaje "Hola, Inyección de Dependencia!" a la consola.

Salida: El programa imprime el mensaje de cadena "Hola, de inyección de dependencia!"

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajar con PDF): Figura 3 - Salida de la consola del código anterior

IronPDF: C# Biblioteca PDF

IronPDF es una potente biblioteca para C# que simplifica el complejo proceso de generación de PDF, ofreciendo una amplia gama de funciones para la manipulación de PDF, incluida la capacidad de generar PDF a partir de HTMLla operación de sumar texto y imágenescrear documentos seguros y mucho más.

Microsoft.Extensions.DependencyInjection .NET 6 (Cómo trabajar con PDF): Figura 4 - Ejemplo en C# de Microsoft.Extensions.DependencyInjection (Cómo funciona para los desarrolladores): Figura 2 - IronPDF

Uso de IronPDF con inyección de dependencias

Para integrar la biblioteca IronPDF en una aplicación .NET Core aprovechando las características de inyección de dependencias y los métodos de extensión con Microsoft.Extensions.DependencyInjection, puede proceder de la siguiente manera:

  1. Cree una interfaz para definir su servicio de generación de PDF.

  2. Implementa la interfaz.

  3. Utilizar métodos de extensión para registrar el servicio en el contenedor de inyección de dependencias.

  4. Inyecte el servicio en su aplicación según sea necesario.

Definir interfaz

Cree una interfaz para definir su servicio de generación de 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#

Implementar interfaz

Implemente la interfaz utilizando IronPDF para crear el archivo 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#

Servicio de registro

En su clase Program.cs, configure la inyección de dependencias:

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

Esta configuración resuelve las dependencias implementando la interfaz IPdfService con IronPdfService, estableciendo un tipo de servicio singleton para la generación de PDF. A continuación, se hace referencia a él en toda la aplicación, lo que garantiza una funcionalidad coherente para generar archivos PDF.

Utilización

Inyecta IPdfService en tu controlador o servicio y utilízalo:

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#

Esta configuración garantiza que IronPdfService sea creado y gestionado por el contenedor Microsoft Extensions Dependency Injection. Puede sustituir sin esfuerzo el servicio de generación de PDF predeterminado ofreciendo una implementación alternativa para la interfaz IPdfService, todo ello sin alterar el código de consumo.

Captura de pantalla del archivo PDF

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajar con PDF): Figura 5 - Ejemplo de salida utilizando el contenedor Microsoft Extensions Dependency Injection junto con IronPDF

Conclusión

Microsoft.Extensions.DependencyInjection es una potente herramienta de .NET 6 para implementar la inyección de dependencias, que fomenta el acoplamiento flexible y mejora la comprobabilidad de las aplicaciones. Gracias a la integración de IronPDF, una biblioteca de C# repleta de funciones, los desarrolladores pueden generar está disponible.

SIGUIENTE >
Ninject .NET Core (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.9 acaba de salir

Descarga gratuita de NuGet Descargas totales: 10,516,730 View Licenses >