📊 Capítulo 18: Injeção de Dependências & Logging
Especialização em Sistemas com C#
🗺️ Os Três Ciclos de Vida do Container de Injeção de Dependências (IoC)
flowchart TD
ROOT["Container de DI: IServiceCollection"]
--> TRANSIENT["Transient (AddTransient)\nUma NOVA instância é criada TODA VEZ que o serviço for solicitado!\n(Ideal para serviços leves sem estado)"]
ROOT --> SCOPED["Scoped (AddScoped)\nUma ÚNICA instância é criada por REQUISIÇÃO HTTP!\n(Obrigatório para DbContext do EF Core e Unit of Work!) ⚡"]
ROOT --> SINGLETON["Singleton (AddSingleton)\nUma ÚNICA instância compartilhada para toda a vida do processo!\n(Caches em memória, Clientes HTTP compartilhados)"]
style ROOT fill:#ede7f6,stroke:#512da8,stroke-width:2px
style TRANSIENT fill:#fff3e0,stroke:#ff9800,stroke-width:2px
style SCOPED fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style SINGLETON fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px
🎯 Slide 1: O Perigo do Captive Dependency
-
Erro Crítico de Arquitetura: Injetar um serviço Scoped (como o
DbContext) dentro de um serviço Singleton! - O Singleton prenderá a primeira instância do DbContext para sempre, causando vazamento de memória e exceções de concorrência com threads simultâneas!
🎯 Slide 2: Logging Estruturado com ILogger
// NUNCA use interpolação de strings em logs!
// Correto (Structured Logging):
logger.LogInformation("Pedido {PedidoId} processado para o cliente {ClienteId} no valor de {Valor}",
pedido.Id, pedido.ClienteId, pedido.Valor);
- As propriedades são gravadas em campos JSON consultáveis no Datadog, ElasticSearch ou Seq!
🎯 Slide 3: IOptions<T> e IOptionsSnapshot<T>
- Ligação fortemente tipada de seções do
appsettings.jsoncom suporte a recarregamento dinâmico sem reiniciar a aplicação!
🔗 Navegação do Capítulo 18
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim