9 segredos do núcleo do ASP.NET

Mais recentemente, atualizamos o ASP.NET Core para a versão 2.1. Um dos criadores da plataforma, nosso colega David Fowler, compartilhou alguns de seus recursos úteis que poucas pessoas conhecem. Além disso, além dos 9 recursos secretos do ASP.NET Core, você também encontrará uma lista das principais inovações com todos os links úteis. Inscreva-se agora!



A versão 2.1 da plataforma ASP.NET Core aberta foi lançada e o desenvolvedor David Fowler twittou alguns de seus recursos úteis que poucas pessoas conhecem. Obviamente, agora a plataforma é mais rápida, mas também há vários novos recursos e práticas recomendadas que vale a pena considerar com mais detalhes.

Host genérico do .NET


O ASP.NET Core agora trabalha com o novo modelo de hospedagem. Os aplicativos .NET se formam e iniciam o host .

O host é responsável por iniciar aplicativos e gerenciar seu ciclo de vida. O objetivo do host genérico é separar o pipelining HTTP da API do host da web para poder criar mais scripts no host. Mensagens, segundo plano e outras tarefas não HTTP funcionam melhor com os recursos de host genérico de ponta a ponta, como configuração, injeção de dependência (DI) e log.

Isso significa que agora para scripts sem hospedagem na web, não há apenas o WebHost, mas também o host genérico. Ao mesmo tempo, o trabalho será tão conveniente quanto no ASP.NET Core, mas você também terá novos recursos, como DI, log e configuração. O código de exemplo para Host Genérico pode ser encontrado no GitHub .

Interface IHOSTEDSERVICE


Com ele, você pode executar longas operações em segundo plano no host universal e nos aplicativos da web. O ASP.NET Core 2.1 introduziu suporte para a classe base BackgroundService, o que facilita muito a criação de um longo loop assíncrono. O código de exemplo para o Serviço Hospedado também está no GitHub .

Crie uma tarefa em segundo plano temporária simples:

public Task StartAsync(CancellationToken cancellationToken) { _logger.LogInformation("Timed Background Service is starting."); _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(5)); return Task.CompletedTask; } 

fácil!

Serviços do Windows no .NET Core


Agora você pode hospedar o ASP.NET Core dentro de um serviço do Windows! Muitos usuários solicitaram adicionar esse recurso. Você não precisa mais do IIS para hospedar o que quiser. Dê uma olhada no Microsoft.AspNetCore.Hosting.WindowsServices no NuGet e na documentação detalhada sobre como hospedar seu próprio aplicativo ASP.NET Core no Windows como um serviço do Windows sem o IIS.

 public static void Main(string[] args) { var pathToExe = Process.GetCurrentProcess().MainModule.FileName; var pathToContentRoot = Path.GetDirectoryName(pathToExe); var host = WebHost.CreateDefaultBuilder(args) .UseContentRoot(pathToContentRoot) .UseStartup<Startup>() .Build(); host.RunAsService(); } 

Configuração IHOSTINGSTARTUP - IWEBHOSTBUILDER com atributo de montagem


Como sempre, uma implementação simples e precisa usando uma fonte no GitHub.

 [assembly: HostingStartup(typeof(SampleStartups.StartupInjection))] 

Pacotes de fontes compartilhadas


Será interessante para você, preste atenção neles. Você pode criar pacotes que são usados ​​como ferramentas auxiliares para o código-fonte distribuído por fonte compartilhada. Entre nós, os chamamos de "pacotes de fontes compartilhadas". Eles são usados ​​no ASP.NET Core em qualquer lugar , quando algo precisa ser compartilhado, mas não deve ser acessível ao público por meio da API. Em seguida, seu código será usado, mas não haverá dependências no pacote final.

Eles são usados ​​no CSPROJ dessa maneira . Preste atenção ao atributo PrivateAssets :

 <PackageReference Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" PrivateAssets="All" Version="" /> <PackageReference Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" PrivateAssets="All" Version="" /> 

OBJECTMETHODEXECUTOR


Se você precisar usar um método em um tipo por meio de reflexão, e esse método puder ser assíncrono, a função ObjectMethodExecutor otimizada e flexível, que usamos em qualquer lugar da base de código do ASP.NET Core, o ajudará.

A equipe usa esse código no MVC para chamar seus métodos de controlador. Eles usam esse código no SignalR para chamar métodos de hub. Funciona com métodos síncronos e assíncronos. Também pode trabalhar com objetos esperados personalizados e fluxos de trabalho assíncronos em F #.

SUPPRESSSTATUSMAGESAGES


Um método pequeno e frequentemente solicitado. Se você não gostar do que aparece após iniciar o driver dotnet ao hospedar o aplicativo Web (imprimir as informações de ligação), poderá usar o novo método de extensão SuppressStatusMessages.

 WebHost.CreateDefaultBuilder(args) .SuppressStatusMessages(true) .UseStartup<Startup>(); 

ADOPÇÕES


Na versão 2.1, ficou mais fácil configurar parâmetros para os quais os serviços são necessários. Antes, era necessário criar um tipo obtido usando IConfigureOptions, agora você pode fazer tudo isso no ConfigureServices usando AddOptions ‹TOptions›

 public void ConfigureServicdes(IServiceCollection services) { services.AddOptions<MyOptions>() .Configure<IHostingEnvironment>((o,env) => { o.Path = env.WebRootPath; }); } 

IHTTPCONTEXT com ADDHTTPCONTEXTACCESSOR


Normalmente, não há necessidade de configurar o IHttpContext, mas muitos querem saber como fazer isso , e alguns acreditam que isso deve ser feito automaticamente. Não é registrado por padrão, pois sua presença leva a uma diminuição no desempenho. No entanto, no ASP.NET Core 2.1 , o PR foi adicionado ao método de extensão, que facilitará o processo, se você desejar.

 services.AddHttpContextAccessor (); 

Portanto, o ASP.NET Core 2.1 está pronto para lançamento .

Novos recursos nesta versão:


Confira a lista de alterações no ASP.NET Core 2.1 nos documentos do ASP.NET Core para saber mais sobre esses recursos. Uma lista completa de todas as alterações na nova versão é fornecida nas notas de versão .

Experimente! Faça o curso de início rápido e você poderá criar aplicativos da Web básicos em 10 minutos.

Source: https://habr.com/ru/post/pt416443/


All Articles