Funktionsweise des Beispiels „Designererweiterungen“
Jedes Projekt im Beispiel Designer Erweiterbarkeit enthält zwei Klassen: eine Extender-Klasse und eine Erweiterungsanbieterklasse. Diese Klassen wurden entwickelt, um die Funktionen zu erweitern und die Eigenschaften der ItineraryDsl-Modellelemente zu definieren.
Die Erweiterungsanbieterklassen leiten sich von der ExtensionProviderBase-Klasse ab und weisen das ExtensionProviderAttribute-Attribut mit Eigenschaften auf, die die Erweiterung und ihren Zweck identifizieren. Diese Werte werden dem Benutzer im Designer angezeigt, wenn der Benutzer die Extender-Eigenschaft für ein Modellelement festlegt. Wenn die Erweiterungsanbieterklassen initialisiert werden, rufen sie den Konstruktor für extensionProviderBase auf und übergeben den Typ der Extenderklasse an diesen.
Auf die Extender-Klassen wird ein ObjectExtender-Attribut angewendet. an das ObjectExtender-Attribut übergeben sie den Typ des Objekts im ItineraryDsl , das sie erweitern. Die Basisklasse für diese Klassen variiert je nach Typ des Extenders. Für Resolver-Extender ist die Basisklasse ObjectExtender<Resolver>. Für Itinerary Service-Extender ist die Basisklasse ItineraryServiceExtenderBase. In den Extender-Klassen werden die folgenden Attribute auf die Eigenschaften angewendet: Attribute, die für die ordnungsgemäße Anzeige in einem Eigenschaftenraster erforderlich sind, Attribute, die zu Validierungszwecken in der Microsoft Enterprise-Bibliothek enthalten sind, Attribute, die für eine ordnungsgemäße Serialisierung erforderlich sind, und/oder Attribute, die bestimmen, wie Eigenschaften beibehalten werden.
Wenn diese Assemblys kompiliert und im Ordner Lib abgelegt werden, werden sie vom Designer zur Laufzeit geladen und zwischengespeichert. Da Extender benötigt werden, verwendet itineraryDsl Reflektion, um die entsprechenden Assemblys aus dem Cache zu laden, indem die exportierten Typen und die Attribute für diese Typen untersucht werden.