NET 6 - Migrando para ASP .NET Core 6 - I


Hoje vou apresentar um roteiro básico de migração para ASP .NET Core no NET 6.

O NET 6 já esta na versão RC2, e, em novembro, será lançado a versão final de produção. Até lá pouca coisa deve mudar no que já temos implementado até agora. (É isso que esperamos...)

A seguir vou apresentar um roteiro básico e resumido das alterações feitas que afetam as aplicações ASP .NET Core e que devem ser consideradas para migrar uma aplicação da versão anterior para a nova versão. (Essas informações foram obtidas deste link )

Usando WebApplication e WebApplicationBuilder

O .NET 6 apresenta um novo modelo de hospedagem para aplicativos ASP.NET Core. Este modelo é simplificado e reduz a quantidade de código padrão necessário para colocar um aplicativo ASP.NET Core básico em funcionamento. (veja meu artigo sobre as Minimal APIs)

O código gerado pelo template ASP .NET Core Empty, apresenta o código abaixo no arquivo Program:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World");

app.Run();

Este modelo unifica o Startup.cs e Program.cs em uma experiência de arquivo único que tira proveito de instruções de nível superior para remover qualquer código clichê.

Assim os projetos ASP .NET Core não possuem mais o arquivo Startup e o arquivo Program agora contém todo o código necessário para inicialização da aplicação.

Assim o código existente nos métodos ConfigureServices e Configure da extinta classe Startup estão presentes no arquivo Program conforme exemplo a seguir:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

Neste exemplo vemos que ConfigureServices(IServiceCollection) pode ser configurado usando WebApplicationBuilder.Services e Configure (IApplicationBuilder ...) pode ser configurado usando WebApplication.

Diferenças no modelo de hospedagem

As principais diferenças no NET 6 são:

Com essas alterações o novo modelo de hospedagem deve ser funcionalmente equivalente em 98% ao que você pode fazer com o IHostBuilder e o IWebHostBuilder. Existem cenários mais avançados (os 2%) que exigirão recursos específicos no IHostBuilder, mas espera-se que isso seja extremamente raro.

O modelo de host genérico é um modelo alternativo que continuará funcionando para sempre. O host genérico ainda sustenta o novo modelo de hospedagem e ainda é a principal forma de hospedar aplicativos.

Este novo modelo deverá ser a forma  preferida de hospedar aplicativos ASP.NET Core do .NET 6 em diante, mas você não é forçado a alterar o layout do projeto. Isso significa que você pode atualizar do .NET 5 para o .NET 6.0, alterando a tag target framework em seu arquivo de projeto de net5.0 para net6.0.

Se você quiser pode também manter a classe Startup nos seus projetos. A seguir um exemplo de como fazer isso no código de migração :

1- Program.cs

var builder = WebApplication.CreateBuilder(args);

var startup = new Startup(builder.Configuration);

startup.ConfigureServices(builder.Services);

var app = builder.Build();

startup.Configure(app, app.Environment);

app.Run();

 

2- Startup.cs

class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment environment)
    {  }
}

Existem algumas diferenças aqui:

  1. Você controla a instanciação e o tempo de vida da classe Startup;
  2. Quaisquer serviços adicionais injetados no método Configure precisam ser resolvidos manualmente por sua classe Program;

Na próxima parte do artigo vou apresentar como realizar as principais tarefas relacionadas com os novos recursos e o código de migração usado para isto.

"E, ao pôr do sol, todos os que tinham enfermos de várias doenças lhos traziam; e, pondo as mãos sobre cada um deles, 'Jesus' os curava."
Lucas 4:40

Referências:


José Carlos Macoratti