次の方法で共有


デザイナー機能拡張サンプルのしくみ

Designer拡張サンプルの各プロジェクトには、エクステンダー クラスと拡張機能プロバイダー クラスの 2 つのクラスが含まれています。 これらのクラスは、機能を拡張し、 ItineraryDsl モデル要素のプロパティを定義するように設計されています。

拡張プロバイダー クラスは ExtensionProviderBase クラスから派生し、拡張機能とその目的を識別するプロパティを使用して ExtensionProviderAttribute を適用します。 これらの値は、ユーザーがモデル要素に エクステンダー プロパティを設定するときに、デザイナーでユーザーに表示されます。 拡張機能プロバイダー クラスを初期化すると、ExtensionProviderBase のコンストラクターを呼び出し、エクステンダー クラスの型を渡します。

エクステンダー クラスには、ObjectExtender 属性が適用されています。ObjectExtender 属性に対して、拡張する ItineraryDsl 内のオブジェクトの型を渡します。 これらのクラスの基底クラスは、エクステンダーの種類によって異なります。 リゾルバー エクステンダーの場合、基本クラスは ObjectExtender<Resolver> です。 Itinerary Service エクステンダーの場合、基底クラスは ItineraryServiceExtenderBase ですエクステンダー クラスでは、プロパティに次の属性が適用されます。プロパティ グリッドに適切に表示するために必要な属性、検証目的で Microsoft Enterprise Library に含まれる属性、適切なシリアル化に必要な属性、プロパティの永続化方法を決定する属性などです。

これらのアセンブリがコンパイルされ、Lib フォルダーに配置されると、実行時にデザイナーによって読み込まれ、キャッシュされます。 エクステンダーが必要な場合、 ItineraryDsl はリフレクションを使用して、エクスポートされた型とそれらの型の属性を調べることで、キャッシュから該当するアセンブリを読み込みます。