Skip to content

Instantly share code, notes, and snippets.

@nathy-mesquita
Created June 29, 2021 13:05
Show Gist options
  • Save nathy-mesquita/efffa85b2271c6021da5a57fc8fac774 to your computer and use it in GitHub Desktop.
Save nathy-mesquita/efffa85b2271c6021da5a57fc8fac774 to your computer and use it in GitHub Desktop.
DEMO - Options pattern in ASP.NET Core

Padrão de opções

Nessa demo iremos criar uma opção de configuração para restrição de horário:

Em appsettings coloque os horários de início e fim para execução de compra/pedido:

"OpeningTime": {
    "StartAt": "08:00:00",
    "FinishAt": "18:00:00"
  }

Crie um modelo com as propriedades de acordo com o que foi definido em appsettings:

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;

namespace DevFreela.API.Models
{
    public class OpeningTimeOption
    {
        public TimeSpan StartAt { get; set; }
        public TimeSpan FinishAt { get; set; }
    }
}

Em Startup configure a classe do modelo para referenciar a seção criada no appsettings :

public void ConfigureServices(IServiceCollection services)
{
    //Serviço de Configuração da interface IConfiguration, Classe criada, seção que representa esses dados.
    //Ele cria uma instância dessa configuração, batendo os dados criados no appsettings com o modelo de classe OpeningTimeOption
    services.Configure<OpeningTimeOption>(Configuration.GetSection("OpeningTime"));

    [...]
}

Na controladora, ProjectsController use:

  • Crie uma váriavel privada apenas para leitura referenciando a classe criada;
  • No construtor, use a interface IOptions<nome_classe>;
[Route("api/[controller]")]
    public class ProjectsController : ControllerBase
    {
        private readonly OpeningTimeOption _option;

        public ProjectsController(IOptions<OpeningTimeOption> option)
        {
            _option = option.Value;
        }

       [...]

    }

Ao executar a aplicação obtivemos o seguinte resultado: image

Mudando as Variáveis de Ambiente:

  • Visual Studio:

    No projeto clique com o botão direito do mouse, em seguida properties (Alt + Enter), em Debug > Environment variables coloque ASPNETCORE_ENVIRONMENT como Name e o ambiente em Value: image

  • Windows (VS Code): image

  • Linha de comando:

set ASPNETCORE_ENVIRONMENT="Development"
set ASPNETCORE_ENVIRONMENT="Staging"
set ASPNETCORE_ENVIRONMENT="Production"

Executar a aplicação:

dotnet run

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment