👷Servicios

Los servicios en .NET son componentes que proporcionan funcionalidades específicas a otras partes de una aplicación. Se utilizan principalmente en aplicaciones basadas en ASP.NET Core y son fundamentales para la inyección de dependencias, lo que ayuda a mantener el código limpio, modular y fácil de probar.

🔄 Inyección de Dependencias (DI)

🔹 Es un patrón de diseño utilizado para lograr una baja acoplamiento entre clases. 🔹 Permite que las dependencias (como bases de datos, lógica de negocios, etc.) se pasen a las clases que las necesitan en lugar de crearlas internamente. 🔹 Facilita el mantenimiento y la prueba del código.

🛠 Tipos de Servicios

1️⃣Singleton

📌 Descripción: 🔹 Crea una única instancia de un servicio durante la vida útil de la aplicación. 🔹 Comparte la misma instancia en todas las solicitudes.

📋 Ejemplo:

services.AddSingleton<IMiServicio, MiServicio>();

2️⃣Transient

📌 Descripción:

🔹 Crea una nueva instancia de un servicio cada vez que se solicita.

🔹 Útil para servicios ligeros y sin estado.

📋 Ejemplo

services.AddTransient<IMiServicio, MiServicio>();

3️⃣Scoped

📌 Descripción:

🔹 Crea una nueva instancia de un servicio por cada solicitud (por ejemplo, por cada solicitud HTTP). 🔹 Ideal para servicios que mantienen estado durante una solicitud.

📋 Ejemplo:

services.AddScoped<IMiServicio, MiServicio>();

🧩 Cómo se Usan

🔹 Los servicios se registran en el contenedor de servicios (usualmente en el método ConfigureServices de Startup.cs).

🔹 Luego, se pueden inyectar en controladores, vistas o en otros servicios.

🔹 La inyección se hace a través de constructores, propiedades o métodos.

📝 Ejemplo Completo

public interface IMiServicio
{
    void HacerAlgo();
}

public class MiServicio : IMiServicio
{
    public void HacerAlgo()
    {
        // Lógica del servicio
    }
}

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IMiServicio, MiServicio>(); // Singleton
        services.AddTransient<IMiServicio, MiServicio>(); // Transiente
        services.AddScoped<IMiServicio, MiServicio>(); // Scoped
    }

    // Otros métodos de la clase Startup...
}

public class MiControlador : Controller
{
    private readonly IMiServicio _miServicio;

    public MiControlador(IMiServicio miServicio)
    {
        _miServicio = miServicio;
    }

    public IActionResult Index()
    {
        _miServicio.HacerAlgo();
        return View();
    }
}

En este ejemplo, IMiServicio es una interfaz y MiServicio es su implementación. El servicio se registra en Startup.ConfigureServices y se inyecta en MiControlador, donde se utiliza su método HacerAlgo. Dependiendo de cómo se registre el servicio (Singleton, Transiente o Scoped), la instancia de MiServicio se manejará de manera diferente por el contenedor de inyección de dependencias.

Última actualización