AYUDA .NET

Microsoft.Extensions .DependencyInjection .NET 9 (Trabajando con PDF)

Chipego
Chipego Kalinda
13 de agosto, 2024
Actualizado 29 de enero, 2024
Compartir:

Microsoft.Extensions.DependencyInjection es una biblioteca poderosa proporcionada por Microsoft .NET para facilitar la Inyección de Dependencias (DI), un patrón de diseño de software que promueve el acoplamiento débil y mejora la capacidad de prueba en las aplicaciones. La Inyección de Dependencias (DI) a menudo se implementa utilizando el contenedor DI integrado de .NET Core o bibliotecas como Autofac y Unity. DI implica inyectar dependencias (objetos que una clase necesita) 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 (Trabajo con PDF): Figura 1 - Documentación de Microsoft.Extensions.DependencyInjectionName

Contenedor de inyección de dependencias

  1. Registro de servicio: Las dependencias se registran en un contenedor de inyección de dependencias (DI), típicamente 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 de 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 de 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 inyección de dependencias (DI).
  • Inyección de método: 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 de una sola instancia o los servicios con un tiempo de vida limitado a un ámbito pueden asignarse 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. Alcance: Las dependencias de alcance se crean una vez por solicitud o en un ámbito de vida útil, lo que significa que el contenedor proporciona la misma instancia dentro de una sola 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. Transitorio: Las dependencias transitorias se instancian cada vez que se solicitan desde el 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 solo una vez y se comparten durante toda la vida útil de la aplicación. Esto asegura que se utilice la misma instancia de una dependencia singleton para todas las solicitudes durante 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.

Instalando el paquete Microsoft.Extensions.DependencyInjection

Para comenzar a usar la inyección de dependencias en un proyecto de .NET Core, primero necesitas instalar el 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
$vbLabelText   $csharpLabel

Captura de pantalla

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

Ejemplo: Inyección de dependencia básica

En este ejemplo, creemos una aplicación de muestra (aplicación de consola) en la 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
$vbLabelText   $csharpLabel

El fragmento de código crea una regla para el envío de 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
$vbLabelText   $csharpLabel

Este código configura un serviceProvider para gestionar herramientas. Agrega una herramienta ConsoleMessageService a él. Luego, recupera la herramienta IMessageService desde serviceProvider y la utiliza para enviar el mensaje "Hello, Dependency Injection!" a la consola.

Salida: El programa imprime el mensaje de cadena "Hello, From Dependency Injection!"

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajando con PDF): Figura 3 - Salida de consola desde el 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 características para la manipulación de PDF, incluyendo la capacidad de generar PDFs desde HTML, la operación de añadir texto a PDFs y editar PDFs con imágenes, crear documentos seguros, y mucho más.

Microsoft.Extensions.DependencyInjection .NET 6 (Trabajando con PDF): Figura 4 - Ejemplo de Microsoft.Extensions.DependencyInjection C# (Cómo funciona para 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
$vbLabelText   $csharpLabel

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

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

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 úsalo:

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

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 (Trabajando con PDF): Figura 5 - Ejemplo de resultado utilizando el contenedor de inyección de dependencias de Microsoft Extensions 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. Mediante la integración de IronPDF, una biblioteca de C# repleta de funciones, los desarrolladores pueden generar fácilmente documentos PDF completos con el mínimo esfuerzo. Licencias para IronPDF están disponibles.

Chipego
Ingeniero de software
Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.
< ANTERIOR
Junit Java (Cómo funciona para los desarrolladores)
SIGUIENTE >
Ninject .NET Core (Cómo funciona para desarrolladores)