Funzionamento del campione di estensibilità di progettazione
Ogni progetto nell'esempio di estendibilità Designer contiene due classi: una classe Extender e una classe Provider di estensioni. Queste classi sono progettate per estendere le funzionalità e definire le proprietà degli elementi del modello RouteyDsl .
Le classi provider di estensione derivano dalla classe ExtensionProviderBase e hanno l'estensioneProviderAttribute applicata a loro con proprietà che identificano l'estensione e il relativo scopo. Questi valori verranno visualizzati all'utente nella finestra di progettazione quando l'utente imposta la proprietà Extender su un elemento modello. Quando le classi provider di estensione inizializzano, chiamano al costruttore per ExtensionProviderBase e passano al tipo della classe extender.
Le classi Extender hanno un attributo ObjectExtender applicato a loro; all'attributo ObjectExtender , passano il tipo dell'oggetto nell'oggetto RouteyDsl esteso. La classe di base per queste classi varia a seconda del tipo di estensione. Per gli extender Resolver, la classe base è ObjectExtender<Resolver>. Per gli estensioni del servizio Itinerario, la classe di base è ItinerarioServiceExtenderBase. Nelle classi Extender vengono applicati gli attributi seguenti alle proprietà: gli attributi necessari per la visualizzazione appropriata in una griglia di proprietà, gli attributi inclusi nella Libreria Microsoft Enterprise per scopi di convalida, gli attributi necessari per la serializzazione corretta e/o gli attributi che determinano la modalità di conservazione delle proprietà.
Quando questi assembly vengono compilati e inseriti nella cartella Lib, vengono caricati e memorizzati nella cache dalla finestra di progettazione in fase di esecuzione. Poiché sono necessari i estensioni, RouteyDsl usa la reflection per caricare gli assembly applicabili dalla cache esaminando i tipi esportati e gli attributi in tali tipi.