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) |