Diferença entre AddTransient, AddScoped e AddSingleton no ASP.NET Core: quando e o que usar?
Olá a todos! Recentemente comecei a estudar ASP.NET Core e o mecanismo embutido de injeção de dependência (DI). Acho que entendi o registro de serviços em `ConfigureServices`, mas a escolha do tempo de vida do serviço me confunde.
Tenho um exemplo simples. Digamos que estou escrevendo uma aplicação para uma loja online, e tenho um serviço `CartService` que gerencia o carrinho do usuário, e um `LoggerService` que registra ações.
No startup, eu os registro assim:
```csharp
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient();
services.AddScoped();
services.AddSingleton();
}
```
Não entendo completamente a diferença entre `AddTransient`, `AddScoped` e `AddSingleton`. Há muitas explicações na internet, mas muitas vezes são muito abstratas.
Minhas perguntas:
1. O que acontece se eu errar na escolha do tempo de vida? Por exemplo, registrar um serviço de banco de dados como Singleton?
2. Em quais cenários devo usar