Voir le flux RSS

Blog de Hinault Romaric (.NET Core, ASP.NET Core, Azure, DevOps)

[Actualité] ASP.NET Core 2.1 : Introduction à Razor Class Librairy

Note : 3 votes pour une moyenne de 3,67.
par , 06/09/2018 à 13h05 (858 Affichages)
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 - Visualiser dans une fenêtre à part
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 :


Nom : img2.PNG
Affichages : 1897
Taille : 9,8 Ko

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.

Nom : img3.PNG
Affichages : 1767
Taille : 14,6 Ko

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.

Nom : img4.PNG
Affichages : 1719
Taille : 10,4 Ko

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

Nom : img5.PNG
Affichages : 1721
Taille : 24,0 Ko

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.

Nom : img6.PNG
Affichages : 1721
Taille : 13,3 Ko

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.

Nom : img7.PNG
Affichages : 1718
Taille : 24,1 Ko

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

Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Viadeo Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Twitter Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Google Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Facebook Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Digg Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Delicious Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog MySpace Envoyer le billet « ASP.NET Core 2.1 : Introduction à Razor Class Librairy » dans le blog Yahoo

Commentaires

  1. Avatar de François DORIN
    • |
    • permalink
    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 ?
  2. Avatar de tomlev
    • |
    • permalink
    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...
  3. Avatar de jbk21
    • |
    • permalink
    bien masta
  4. Avatar de Hinault Romaric
    • |
    • permalink
    Citation Envoyé par François DORIN
    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.
  5. Avatar de Hinault Romaric
    • |
    • permalink
    Citation Envoyé par tomlev
    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.