ASP .NET Core 3.1 -  Host Genérico


Neste artigo vou apresentar o Host Genérico usado nas aplicações ASP .NET Core a partir da versão 3.0.

 

Os templates da ASP .NET Core criam um Host Genérico HostBuilder que é um utilizado para inicialização do programa.

O host é um objeto que encapsula os recursos de um aplicativo, como:

A definição do host esta presente na classe Program que configura a infraestrutura do aplicativo como host da Web, log, contêiner de injeção de dependência, integração com o IIS etc.

O host é configurado, criado e executado na classe Program no método Main() onde é chamado o método CreateHostBuilder para criar e configurar um objeto do construtor que chama os métodos Build e Run:

public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }

Obs: Se sua aplicação for usar o Entity Framework Core, não altere o nome ou a assinatura do método CreateHostBuilder pois as ferramentas do Entity Framework Core esperam encontrar um método CreateHostBuilder que configure o host sem executar o aplicativo.

Quando um host é iniciado, ele chama o método IHostedService.StartAsync em cada implementação de IHostedService que encontra no contêiner de DI. Em uma aplicação Web, uma das implementações de IHostedService é um serviço Web que inicia uma implementação de servidor HTTP.

A execução do método CreateHostBuilder aciona o método CreateDefaultBuilder que realiza as seguintes tarefas:

E o método ConfigureWebHostDefaults faz o seguinte:

Na inicalização os seguintes serviços são registrados de forma automática:

Assim, o host é criado e configurado, mas antes de criar e executar, precisamos configurar ainda mais com o aplicativo e fazemos isso na classe Startup. Nós informamos ao construtor o local da classe de inicialização usando o método : webBuilder.UseStartup<Startup>();

A classe Startup contém dois métodos :

Dessa forma o método Main da classe Program é o ponto de entrada do nosso aplicativo. Ele configura e constrói o host da Web que é responsável por executar nosso aplicativo.

A maior parte do pipeline necessário para configurar o host já foi feita para nós no método CreateDefaultBuilder, que é chamado no método Main.

A partir dai podemos adicionar uma configuração personalizada na classe Startup que vai depender do projeto usado.

E estamos conversados...

"Foge também das paixões da mocidade; e segue a justiça, a fé, o amor, e a paz com os que, com um coração puro, invocam o Senhor."
2 Timóteo 2:22

Referências:


José Carlos Macoratti