Sobes.tech
Middle

Para que servem os métodos de configuração de serviços em C#?

sobes.tech IA

Resposta da IA

Para registar dependências no container de injeção de dependências (Dependency Injection container). Isto permite que a infraestrutura da aplicação gere a criação de instâncias de serviços e as injete onde forem necessárias.

Objetivos principais:

  • Gestão do ciclo de vida: Definir o tempo de existência da instância do serviço (Singleton, Scoped, Transient).
  • Arquitetura desacoplada: Reduzir a dependência entre componentes usando abstrações (interfaces).
  • Testabilidade: Facilitar a substituição de implementações de serviços para testes unitários.
  • Configurabilidade: Possibilidade de substituir uma implementação por outra sem alterar o código cliente.

Exemplo de registo de serviços no ASP.NET Core:

// Startup.cs ou Program.cs em Minimal APIs
public void ConfigureServices(IServiceCollection services)
{
    // Registo de serviço com ciclo de vida Singleton
    services.AddSingleton<ISingletonService, SingletonService>();

    // Registo de serviço com ciclo de vida Scoped
    services.AddScoped<IScopedService, ScopedService>();

    // Registo de serviço com ciclo de vida Transient
    services.AddTransient<ITransientService, TransientService>();

    // Registo de MVC e outros serviços padrão
    services.AddControllersWithViews();
}

Ciclos de vida dos serviços:

Ciclo de vida Descrição Instâncias numa única requisição (HTTP)
Singleton Uma instância durante toda a vida da aplicação. Uma
Scoped Uma instância durante a vida da requisição (no contexto HTTP). Uma
Transient Uma nova instância é criada a cada requisição de serviço. Várias (a cada injeção)