.NET Core – Configurações específicas por SO
Publicado em: sábado, 19 de ago de 2017
Tags:

Que o .NET Core roda no Windows e no Linux isso é mais que sabido. Mas você pode precisar de configurações específicas por tipo de SO. Paths necessários para executar alguma tarefa podem divergir, e esse é o caso do docker. O endereço da API do Docker Daemon é diferente no Windows e no Linux. No Linux você usa unix sockets, enquanto no Windows named pipes.

Então vou apresentar o princípio que permite fazer essa troca de configuração e a partir daí você pode escolher por pelo menos 2 abordagens.

A mágica está na classe Environment e na propriedade estática OSVersion. Na prática a enum PlatformID presente em Environment.OSVersion.Platform é descrita como abaixo:

//
// Summary:
//     Identifies the operating system, or platform, supported by an assembly.
public enum PlatformID
{
    //
    // Summary:
    //     The operating system is Win32s. Win32s is a layer that runs on 16-bit versions
    //     of Windows to provide access to 32-bit applications.
    Win32S = 0,
    //
    // Summary:
    //     The operating system is Windows 95 or Windows 98.
    Win32Windows = 1,
    //
    // Summary:
    //     The operating system is Windows NT or later.
    Win32NT = 2,
    //
    // Summary:
    //     The operating system is Windows CE.
    WinCE = 3,
    //
    // Summary:
    //     The operating system is Unix.
    Unix = 4,
    //
    // Summary:
    //     The development platform is Xbox 360.
    Xbox = 5,
    //
    // Summary:
    //     The operating system is Macintosh.
    MacOSX = 6
}

Isso permite que você possa possa segmentar nós de um único arquivo, como no exemplo abaixo, ou gerar diversos arquivos, um para cada plataforma.

{
    "AppSettings": {
        "Win32NT": {
            "DockerEndpoint": "npipe://./pipe/docker_engine",
            "DataDir": "../data"

        },
        "Unix": {
            "DockerEndpoint": "unix:/var/run/docker.sock",
            "DataDir": "/data"
        }
    }
}

Respeitando o exemplo do arquivo de configuração acima, você pode usar a seguinte estratégia para configurar a injeção de dependência com uma instância configurada:

var entryPointConfiguration = Configuration.Get<EntryPointConfigurationModel>($"AppSettings:{Environment.OSVersion.Platform.ToString()}");
services.AddSingleton(entryPointConfiguration);

No exemplo estou levando em conta apenas Windows e Linux, SO’s de referência para a minha aplicação, já que estou falando de gerenciamento de containers Docker, portanto estou realmente ignorando versões antigas do Windows, Xbox, mas de forma equivocada estou ignorando Mac. Vou tratar de acertar isso, já que esse é um exemplo real.

 

 

Luiz Carlos Faria

Mensagem do Autor

Espero que goste desse post. Não deixe de comentar e falar o que achou. 

Se acha que esse post pode ajudar alguém que você conheça, compartilhe!

 

Eventos passados

novembro 2020
outubro 2020
setembro 2020
agosto 2020
Nenhum evento encontrado!
Carregar Mais

Publicidade

Assine

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.

Agenda & Eventos

novembro

dezembro 2020

janeiro
DOM
SEG
TER
QUA
QUI
SEX
SAB
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
Events for 1st dezembro
Sem Eventos
Events for 2nd dezembro
Sem Eventos
Events for 3rd dezembro
Sem Eventos
Events for 4th dezembro
Sem Eventos
Events for 5th dezembro
Sem Eventos
Events for 6th dezembro
Sem Eventos
Events for 7th dezembro
Sem Eventos
Events for 8th dezembro
Sem Eventos
Events for 9th dezembro
Sem Eventos
Events for 10th dezembro
Sem Eventos
Events for 11th dezembro
Sem Eventos
Events for 12th dezembro
Sem Eventos
Events for 13th dezembro
Sem Eventos
Events for 14th dezembro
Sem Eventos
Events for 15th dezembro
Sem Eventos
Events for 16th dezembro
Sem Eventos
Events for 17th dezembro
Sem Eventos
Events for 18th dezembro
Sem Eventos
Events for 19th dezembro
Sem Eventos
Events for 20th dezembro
Sem Eventos
Events for 21st dezembro
Sem Eventos
Events for 22nd dezembro
Sem Eventos
Events for 23rd dezembro
Sem Eventos
Events for 24th dezembro
Sem Eventos
Events for 25th dezembro
Sem Eventos
Events for 26th dezembro
Sem Eventos
Events for 27th dezembro
Sem Eventos
Events for 28th dezembro
Sem Eventos
Events for 29th dezembro
Sem Eventos
Events for 30th dezembro
Sem Eventos
Events for 31st dezembro
Sem Eventos
Share This