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!

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.
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:
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.
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:
appsettings.json com uma seção CloudInfo contendo três pares de chave-valor.CloudInfoOptions, que mapeia para esses valores 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, embora esteja usando appsettings.json, os valores de configuração também poderiam vir de:
appsettings.Development.jsonsecrets.jsonAgora, Tim explica como vincular os valores de configuração à classe CloudInfoOptions e injetá-los em DI.
Em Program.cs, Tim adiciona a seguinte linha dentro builder.Services:
builder.Services.Configure<CloudInfoOptions>(builder.Configuration.GetSection("CloudInfo"));builder.Services.Configure(Of 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.
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
Para recuperar os valores reais, ele os atribui dentro de OnInitialized:
protected override void OnInitialized()
{
CloudInfo = CloudInfoOptions.Value;
}Protected Overrides Sub OnInitialized()
CloudInfo = CloudInfoOptions.Value
End SubTim 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.
Tim então apresenta três maneiras diferentes de usar o padrão Options:
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.
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 em que mudanças precisam ser refletidas sem reiniciar o aplicativo, mas não requerem monitoramento ao vivo.
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
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.
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#.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy