ASP.NET Core 2.1 : Introduction à Razor Class Librairy,
Un tutoriel par Hinault Romaric

Le , par Hinault Romaric, Responsable .NET
Dans ce billet de blog, je vais revenir sur l’une des nouveautés de ASP.NET Core 2.1, que je trouve très intéressante. Il s’agit de Razor Class Library. Cette fonctionnalité attire mon attention aujourd’hui parce que j’avais déjà eu un besoin pareil sur l’un des projets sur lesquels je suis intervenu. J’ai encore été interpellé récemment sur un besoin pareil.

Pour partager et réutiliser du code, il faut passer par des librairies de classes. Les classes sont compilées et générées dans des assemblies qui pourront ensuite être utilisées dans d’autres applications. Malheureusement, dans ces assemblies, il n’est pas possible d’inclure du code d’interface, notamment du code Razor.

Pour un développeur ASP.NET, la réutilisation du code va au-delà des classes. Il aimerait être en mesure de partager plus. Supposons que vous avez mis en place un module d’authentification qui va être intégré et utilisé par toutes les applications Web de votre entreprise. Le module d’authentification inclut les vues cshtml, le modèle et les contrôleurs. Pour partager ce code, vous serez obligé de copier ces fichiers dans chaque projet.

Avec Razor Class Librairy, ces fichiers seront compilés dans une librairie de classes réutilisable. La création d’un projet de librairie de classes Razor se fait en utilisant la commande :

Code : Sélectionner tout
dotnet new razorclasslib
Cela va permettre de créer un projet Razor Class Librairy en utilisant le nouveau modèle de projet qui a été créé à cet effet.
La structure proposée repose par défaut sur des Area et ASP.NET Razor Pages :




Vous pouvez utiliser MVC si vous le souhaitez.

Le projet créé malgré la présence des fichiers cshtml est une librairie de classes. De ce fait, ce dernier ne peut pas être exécuté, car il ne dispose pas d’un exécutable. Vous n’êtes donc pas en mesure de visualiser vos pages dans un navigateur, à défaut de l’intégrer dans un projet Web exécutable.


Une fois que votre librairie de classes Razor est prête à être utilisée, vous pouvez la partager comme toute librairie .NET et l’intégrer dans le projet client. La sortie de la librairie est un fichier RazorClassLibrary.dll et un fichier RazorClassLibrary.Views.dll. Le fichier RazorClassLibrary.Views.dll est la compilation du contenu Razor.



Une fois le package ajouté à votre projet, vous pouvez visualiser le résultat en utilisant l’adresse correspondante :


Vous pouvez apporter votre propre implémentation de la page. Il vous suffit de respecter la même hiérarchie et créer un fichier .cshtml ayant le même nom.



En effet, le système de routage d’ASP.NET cherche d’abord le fichier correspondant dans le projet, avant de rechercher si ce dernier existe dans la librairie de classes Razor.



Razor Class Library est une nouveauté intéressante qui rendra encore plus productifs les développeurs Web.

Téléchargez ASP.NET Core 2.1

En savoir plus sur Razor Class Librairy


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster un commentaire

Avatar de François DORIN François DORIN - Responsable .NET & Magazine https://www.developpez.com
le 06/09/2018 à 15:55
Très intéressant ! Merci !

Je suis parvenu à faire grosso-modo la même chose dans un projet, mais avec pas mal de code glue (mécanisme de routage personnalisé notamment).

Par contre, qu'en est-il de la configuration des vues ? Je dis bien configuration, car la personnalisation on peut le faire simplement en redéfinissant la vue. Par configuration, j'entends des choses comme :
  • est-il possible de définir le layout à utiliser ?
  • est-il possible de personnaliser le nom de la zone ?
  • est-il possible de personnaliser le routage sous-jacent ?
Avatar de tomlev tomlev - Rédacteur/Modérateur https://www.developpez.com
le 07/09/2018 à 16:09
Merci pour l'article !

Vous pouvez apporter votre propre implémentation de la page. Il vous suffit de respecter la même hiérarchie et créer un fichier .cshtml ayant le même nom.
Il y a plus simple : menu Project > Add > Scaffolded item, choisir "Identity", et choisir les pages qu'on veut scaffolder. Ça les crée tout seul sur la base des pages de la lib.

A mon avis les Razor Class Libraries se prêtent bien aux cas où il n'y à pas grand chose à customiser. C'est utilisé par exemple pour ASP.NET Core Identity UI, mais à mon avis cette lib est encore un peu immature, parce que dès qu'on veut y faire le moindre changement (ne serait-ce que traduire dans une autre langue ou ajouter le support pour l'internationalisation), il faut tout scaffolder...
Avatar de jbk21 jbk21 - Membre du Club https://www.developpez.com
le 08/09/2018 à 5:51
bien masta
Avatar de Hinault Romaric Hinault Romaric - Responsable .NET https://www.developpez.com
le 13/09/2018 à 21:01
Citation Envoyé par François DORIN Voir le message
Très intéressant ! Merci !

Je suis parvenu à faire grosso-modo la même chose dans un projet, mais avec pas mal de code glue (mécanisme de routage personnalisé notamment).

Par contre, qu'en est-il de la configuration des vues ? Je dis bien configuration, car la personnalisation on peut le faire simplement en redéfinissant la vue. Par configuration, j'entends des choses comme :
  • est-il possible de définir le layout à utiliser ?
  • est-il possible de personnaliser le nom de la zone ?
  • est-il possible de personnaliser le routage sous-jacent ?
Je n'ai pas creusé en profondeur, mais je crois qu'il est possible de définir le layout à utiliser.

Je crois qu'en dehors, de re-implémenter complètement la page, les seules zones qui peuvent être personnalisées sont celles incluses dans une vue partielle. A ce moment, on peut juste fournir sa propre implémentation de la vue partielle.
Avatar de Hinault Romaric Hinault Romaric - Responsable .NET https://www.developpez.com
le 13/09/2018 à 21:22
Citation Envoyé par tomlev Voir le message
Merci pour l'article !

Il y a plus simple : menu Project > Add > Scaffolded item, choisir "Identity", et choisir les pages qu'on veut scaffolder. Ça les crée tout seul sur la base des pages de la lib.
Je ne suis pas sur d'avoir compris. Cette nouvelle (Identity) option permet l'ajout des vues et du code nécessaire pour le support de ASP.NET Identity. C'est juste une nouveauté qui s'appuie sur Razor Class Librairy, mais elle ne te permet pas de procéder à un override de ta librairie de classes razor.

Le Scaffold Identity est aussi une nouveauté intéressante. Précédemment, pour un projet créé sans le support de l'authentification en partant, tu devais te démerder pour intégrer cela.
Responsables bénévoles de la rubrique Microsoft DotNET : Hinault Romaric - François DORIN -