ASP.NET Core 2.1: utilizando Razor Class Libraries

Uma das muitas novidades que integram o ASP.NET Core 2.1 são as Razor Class Libraries. Este novo tipo de recurso permite encapsular em uma biblioteca construções como Razor Pages, Views e Controllers, contribuindo assim para um maior reaproveitamento de código em projetos Web baseados no ASP.NET Core.

Neste novo artigo apresento um exemplo prático envolvendo uma Razor Class Library, através da implementação de uma biblioteca reutilizável contendo uma Razor Page.

E por falar em tecnologias Microsoft, não deixem também de acompanhar o Azure Tech Nights, que acontecerá entre os dias 20 e 28 de Agosto de 2018. Será um evento NOTURNO, ONLINE e GRATUITO promovido pelo Canal .NET, com apresentações focadas no Microsoft Azure e cobrindo temas como microsserviços, Inteligência Artificial, desenvolvimento Web, bancos de dados, NoSQL, Docker, Kubernetes e muito mais.
Entre os palestrantes teremos MVPs Microsoft, MTACs e Especialistas de Mercado.
Para efetuar a inscrição acessem este link.
A grade com as palestras e outras informações podem ser encontradas no site oficial do Azure Tech Nights.

Implementando uma Razor Class Library

O ASP.NET Core 2.1 conta também com um novo template chamado Razor Class Library, sendo que para o exemplo abordado neste artigo será criada uma biblioteca chamada LibAmbiente:

A seguir é possível observar a estrutura gerada para o projeto LibAmbiente, com o diretório Areas contendo uma pasta chamada MyFeature (esta última traz como parte integrante a estrutura de uma Razor Page):

Esta Area e sua Razor Page serão renomeadas, conforme indicado na próxima imagem:

O código C# da Razor Page Index.cshtml está indicado na listagem a seguir, na qual se nota o uso do objeto TempData (que armazenará o Machine Name do computador que executará uma aplicação que consuma LibAmbiente, bem como o sistema operacional correspondente):

Já o código Razor da página Index.csthml está na próxima listagem:

A Razor Class Library LibAmbiente poderá então ser adicionada a um novo projeto como uma referência, conforme demonstrado a seguir:

Ao acessar o endereço /sistema com a aplicação na qual foi adicionada a referência de LibAmbiente em execução teremos como resultado:

O arquivo Index.cshtml da biblioteca LibAmbiente pode ser configurado a fim de utilizar layouts definidos nas aplicações que consumam esta Razor Class Library. Na próxima listagem temos um exemplo disto, com a atribuição do valor _Layout à propriedade Layout:

Após uma nova execução da aplicação o layout será aplicado à View Index.cshtml:

Customizações também podem ser efetuadas para o arquivo Index.cshtml a partir de um projeto que consuma a biblioteca LibAmbiente. Em situações como essa a estrutura de pastas da Razor Class Library será replicada na aplicação que a utiliza, além de incluir uma nova versão de Index.cshtml (sem a necessidade de implementar o código correspondente ao método OnGet):

O código de Index.cshtml no projeto que consome a Razor Class Library pode inclusive referenciar dados processados/gerados a partir da biblioteca. Essa capacidade está demonstrada na listagem a seguir:

E o resultado final após esses ajustes pode ser visualizado na próxima imagem:

Os fontes deste projeto de exemplo estão no GitHub:

https://github.com/renatogroffe/ASPNETCore2.1_RazorClassLibrary