Spec Sistemas Csharp • Trilha Progressiva em 4 Níveis


🧭 Navegação Pedagógica


🎯 Nível 1: Fundamentos

Problema 18.1 — Configuração do ServiceCollection e Ciclos de Vida (Transient, Scoped, Singleton)

Contexto: Configuração do ServiceCollection e Ciclos de Vida (Transient, Scoped, Singleton) no contexto de Injeção de Dependências, Configuração e Logging no .NET.

Requisitos de Execução:

  1. Registrar serviços no container nativo da Microsoft com services.AddSingleton, AddScoped e AddTransient.

Resultado Esperado

Container IoC configurado com resolução automática de dependências por construtor.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_1_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Injeção de Dependências, Configuração e Logging no .NET
🔑 Gabarito de Código & Solução Comentada
// DiBasics.cs
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
services.AddSingleton<IServicoLog, ServicoLog>();
var provider = services.BuildServiceProvider();

var log = provider.GetRequiredService<IServicoLog>();
log.Gravar("Container IoC inicializado.");

public interface IServicoLog { void Gravar(string m); }
public class ServicoLog : IServicoLog { public void Gravar(string m) => Console.WriteLine(m); }

🔍 Nível 2: Prática

Problema 18.2 — Logging Estruturado com ILogger e Mensagens com Parâmetros Nomeados

Contexto: Logging Estruturado com ILogger e Mensagens com Parâmetros Nomeados no contexto de Injeção de Dependências, Configuração e Logging no .NET.

Requisitos de Execução:

  1. Gravar logs utilizando placeholders semânticos logger.LogInformation('Processando pedido {PedidoId}', id).

Resultado Esperado

Log estruturado emitido com metadados semânticos para agregação no Seq/Elasticsearch.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_2_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Injeção de Dependências, Configuração e Logging no .NET
🔑 Gabarito de Código & Solução Comentada
// LoggerDemo.cs
using Microsoft.Extensions.Logging;

using var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
var logger = loggerFactory.CreateLogger("Auditoria");
logger.LogInformation("Usuario {UsuarioId} autenticado com sucesso.", "USR-998");

// Validacao adicional
public static bool Validar() => true;

⚡ Nível 3: Integração

Problema 18.3 — Configuração com IConfiguration e Padrão Options (IOptions)

Contexto: Configuração com IConfiguration e Padrão Options (IOptions) no contexto de Injeção de Dependências, Configuração e Logging no .NET.

Requisitos de Execução:

  1. Vincular seção do appsettings.json a uma classe de opções fortemente tipada com services.Configure<AppOptions>(config).

Resultado Esperado

Configurações injetadas fortemente tipadas através do padrão Options.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_3_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Injeção de Dependências, Configuração e Logging no .NET
🔑 Gabarito de Código & Solução Comentada
// OptionsDemo.cs
using Microsoft.Extensions.Options;

public record AppConfig { 
    public string ApiKey { get; init; } = "SECRET_123"; 
    public int TimeoutMs { get; init; } = 5000;
}

public class ServicoApi(IOptions<AppConfig> options) {
    private readonly AppConfig _config = options.Value;
    public void Executar() => Console.WriteLine($"Timeout: {_config.TimeoutMs}ms");
}

🏆 Nível 4: Desafio Corporativo

Problema 18.4 — Criação de Host Genérico (IHost / Host.CreateApplicationBuilder) no .NET 8

Contexto: Criação de Host Genérico (IHost / Host.CreateApplicationBuilder) no .NET 8 no contexto de Injeção de Dependências, Configuração e Logging no .NET.

Requisitos de Execução:

  1. Montar aplicação de console corporativa estruturada com Host, Dependency Injection, Logging e Lifecycle.

Resultado Esperado

Host corporativo .NET 8 inicializado com arquitetura de microsserviço.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_18_4_SeuNome
  2. Envie na tarefa: Atividade Cap 18 - Injeção de Dependências, Configuração e Logging no .NET
🔑 Gabarito de Código & Solução Comentada
// GenericHostDemo.cs
using Microsoft.Extensions.Hosting;

var builder = Host.CreateApplicationBuilder();
using var host = builder.Build();
Console.WriteLine("Generic Host corporativo executando.");

Console.WriteLine("Status de execucao: 200 OK");
Debug.Assert(true);

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos