Fonctionnement de l’exemple d’extensibilité du concepteur
Chaque projet de l’exemple d’extensibilité Designer contient deux classes : une classe Extender et une classe Fournisseur d’extension. Ces classes sont conçues pour étendre les fonctionnalités et définir les propriétés des éléments de modèle ItineraryDsl .
Les classes du fournisseur d’extension dérivent de la classe ExtensionProviderBase et l’extensionProviderAttribute leur est appliqué avec des propriétés qui identifient l’extension et son objectif. Ces valeurs sont affichées à l’utilisateur dans le concepteur lorsque l’utilisateur configure la propriété Extender sur un élément de modèle. Lorsque les classes du fournisseur d’extension s’initialisent, elles appellent le constructeur pour ExtensionProviderBase et lui passent le type de la classe extendeur.
Un attribut ObjectExtender est appliqué aux classes Extender ; à l’attribut ObjectExtender, ils passent le type de l’objet dans l’ItineraryDsl qu’ils étendent. La classe de base de ces classes varie en fonction du type d’extendeur. Pour les extendeurs resolver, la classe de base est ObjectExtender<Resolver>. Pour les extendeurs de service d’itinéraire, la classe de base est ItineraryServiceExtenderBase. Dans les classes Extender , les attributs suivants sont appliqués aux propriétés : attributs nécessaires pour un affichage correct dans une grille de propriétés, attributs inclus dans la bibliothèque d’entreprise Microsoft à des fins de validation, attributs nécessaires pour une sérialisation appropriée et/ou attributs qui déterminent la façon dont les propriétés sont conservées.
Lorsque ces assemblys sont compilés et placés dans le dossier Lib, ils sont chargés et mis en cache par le concepteur au moment de l’exécution. Comme des extendeurs sont nécessaires, ItineraryDsl utilise la réflexion pour charger les assemblys applicables à partir du cache en examinant les types exportés et les attributs sur ces types.