Ir para o conteúdo do rodapé
Iron Academy Logo
Aprenda C#
Aprenda C#

Outras categorias

Entendendo a enumeração Set Flag em C#: Atribuindo Flags

Tim Corey
10m 39s

O gerenciamento de configuração é um aspecto essencial na construção de aplicações escaláveis ​​e de fácil manutenção em C#. Uma das maneiras mais eficazes de lidar com configurações é usando o padrão Options . Em seu vídeo " O padrão Options em C# em 10 minutos ou menos" , Tim Corey oferece uma explicação concisa, porém esclarecedora, desse padrão e de como implementá-lo de forma eficiente. Neste artigo, exploraremos o padrão Options por meio das explicações e demonstrações de Tim em seu vídeo.

Introdução

Tim começa apresentando o padrão Options como uma maneira poderosa e simples de recuperar informações de arquivos de configuração e injetá-las na injeção de dependência (DI). Ele destaca diversas vantagens desse padrão, tais como:

  • A capacidade de gerenciar alterações de valores em tempo de execução.
  • Suporte integrado para validação de dados.
  • Compatibilidade com vários tipos de projetos C#, incluindo aplicativos Blazor .

Tim enfatiza que, embora normalmente ofereça treinamento técnico aprofundado, este vídeo foi desenvolvido como um guia rápido para implementar o padrão Options.

Configurando o projeto

Tim começa abrindo o Visual Studio com um aplicativo Web Blazor (somente renderização do lado do servidor). Ele já fez algumas modificações para acelerar a demonstração. A configuração principal envolve:

  • Criando um arquivo appsettings.json com uma seção CloudInfo contendo três pares chave-valor.
  • Usando um modelo POCO (Plain Old CLR Object) chamado CloudInfoOptions, que mapeia para estes valores de configuração.

O arquivo de configuração

O arquivo appsettings.json contém a seguinte seção:

{
  "CloudInfo": {
    "Storage": "Azure Storage",
    "Website": "Azure Static Web Apps",
    "API": "Azure Web App"
  }
}

Tim esclarece que, enquanto está usando appsettings.json, os valores de configuração também podem vir de:

  • appsettings.Development.json
  • secrets.json
  • Variáveis ​​de ambiente

Vinculação da configuração às opções

Agora, Tim explica como vincular os valores de configuração à classe CloudInfoOptions e injetá-los no DI.

Registrando opções em Program.cs

Em Program.cs, Tim adiciona a seguinte linha dentro de builder.Services:

builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));

Isso vincula a seção CloudInfo de appsettings.json à classe CloudInfoOptions. Tim observa que esta etapa garante que os valores estejam disponíveis na injeção de dependência.

Opções de injeção em um componente de Razor

Tim move-se para o componente da Página Inicial (Index.razor) e modifica-o para exibir valores de configuração dinamicamente.

Ele injeta a interface IOptions no componente:

@inject IOptions<CloudInfoOptions> CloudInfoOptions

Para recuperar os valores reais, ele os atribui dentro de OnInitialized:

protected override void OnInitialized()
{
    CloudInfo = CloudInfoOptions.Value;
}
protected override void OnInitialized()
{
    CloudInfo = CloudInfoOptions.Value;
}

Tim explica que IOptions<t> fornece uma instância Singleton dos valores de configuração, o que significa que permanece constante durante o ciclo de vida da aplicação. Quando o aplicativo é executado, os valores de configuração aparecem corretamente na página.

Explorando diferentes opções de interfaces

Tim então apresenta três maneiras diferentes de usar o padrão Options:

1. Opções Singleton

Por padrão, IOptions<t> fornece uma instância Singleton. Tim demonstra que, se o arquivo de configuração for atualizado enquanto o aplicativo estiver em execução, as alterações não serão refletidas a menos que o aplicativo seja reiniciado.

2. Opções Escopadas - Usando IOptionsSnapshot<t>

Para habilitar atualizações por solicitação , Tim modifica a injeção para:

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions

Isso garante que cada nova solicitação HTTP receba valores de configuração atualizados. Tim testa isso modificando appsettings.json, atualizando a página e mostrando que os valores atualizados agora aparecem imediatamente.

Ele explica que IOptionsSnapshot<t> é útil para cenários onde as mudanças precisam ser refletidas sem reiniciar o aplicativo, mas não requerem monitoramento ao vivo.

3. Monitoramento de Mudanças - Usando IOptionsMonitor<t>

Finalmente, Tim introduz IOptionsMonitor<t>, que permite detecção de mudanças em tempo real. Ele atualiza a injeção para:

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions

Diferente de IOptionsSnapshot, que atualiza por solicitação, IOptionsMonitor<t> pode disparar eventos quando os valores de configuração mudam. Isso é particularmente útil quando você precisa reagir dinamicamente a mudanças de configuração.

Tim observa que IOptionsMonitor<t> é suportado por um singleton, mas pode atualizar valores dinamicamente quando o arquivo de configuração subjacente muda.

Conclusão

Tim conclui o vídeo resumindo as principais diferenças entre as três abordagens:

Interface Vida Atualizações sobre mudanças
IOptions<t> Singleton Não
IOptionsSnapshot<t> Escopo A pedido
IOptionsMonitor<t> Singleton Sim

Ele enfatiza que, embora o padrão Options simplifique o gerenciamento de configuração, entender essas diferentes variações ajuda a escolher a abordagem correta com base nos requisitos do projeto.

Seguindo a abordagem de Tim, os desenvolvedores podem gerenciar com eficiência as configurações do aplicativo , garantir uma injeção de dependência tranquila e lidar com as alterações de configuração em tempo de execução de forma eficaz. Para melhor compreensão, assista ao vídeo completo e visite o canal dele para mais vídeos esclarecedores sobre C#.

Hero Worlddot related to Entendendo a enumeração Set Flag em C#: Atribuindo Flags
Hero Affiliate related to Entendendo a enumeração Set Flag em C#: Atribuindo Flags

Ganhe mais compartilhando o que você ama.

Você cria conteúdo para desenvolvedores que trabalham com .NET, C#, Java, Python ou Node.js? Transforme sua expertise em renda extra!

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim