IRONSOFTWAREHOME

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

O padrão Options em C# em 10 minutos ou menos

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 de chave-valor.
  • Usando um modelo Plain Old CLR Object (POCO) chamado CloudInfoOptions, que mapeia para esses 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"
  }
}
JSON

Tim esclarece que, embora esteja usando appsettings.json, os valores de configuração também poderiam 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 em DI.

Registrando opções em Program.cs

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

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 avança para o componente da Home Page (Index.razor) e modifica-o para exibir valores de configuração dinamicamente.

Ele injeta a interface IOptions no componente:

@inject IOptions<CloudInfoOptions> CloudInfoOptions
Text

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

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

Tim explica que IOptions<t> fornece uma instância Singleton dos valores de configuração, significando que permanece constante ao longo do ciclo de vida do aplicativo. 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 Com Escopo - Usando IOptionsSnapshot<t>

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

@inject IOptionsSnapshot<CloudInfoOptions> CloudInfoOptions
Text

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 em que 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 apresenta IOptionsMonitor<t>, que possibilita detecção de mudança em tempo real. Ele atualiza a injeção para:

@inject IOptionsMonitor<CloudInfoOptions> CloudInfoOptions
Text

Ao contrário 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 é alterado.

Conclusão

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

InterfaceVidaAtualizações sobre mudanças
IOptions<t>SingletonNão
IOptionsSnapshot<t>EscopoA pedido
IOptionsMonitor<t>SingletonSim

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#.

Earn More by Sharing What You Love

Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Let's Stay in Touch!

Join our newsletter, you’ll get exclusive access on article updates. We value your privacy

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

OR
bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.