设计器扩展性示例工作原理
Designer扩展性示例中的每个项目都包含两个类:扩展程序类和扩展提供程序类。 这些类旨在扩展功能并定义 ItineraryDsl 模型元素的属性。
扩展提供程序类派生自 ExtensionProviderBase 类,并向其应用 ExtensionProviderAttribute 以及标识扩展及其用途的属性。 当用户在模型元素上设置 Extender 属性时,将在设计器中向用户显示这些值。 当扩展提供程序类初始化时,它们调用 ExtensionProviderBase 的构造函数,并将扩展程序类的类型传递给它。
扩展程序类应用了 ObjectExtender 属性;对 ObjectExtender 属性,在扩展的 ItineraryDsl 中传递对象的类型。 这些类的基类因扩展器类型而异。 对于冲突解决程序扩展程序,基类为 ObjectExtender<Resolver>。 对于行程服务扩展程序,基类为 ItineraryServiceExtenderBase。 在 扩展程序 类中,以下属性应用于属性:在属性网格中正确显示所需的属性、用于验证的 Microsoft 企业库中包含的属性、正确序列化所需的属性和/或确定属性持久化方式的属性。
当编译这些程序集并将其放置在 Lib 文件夹中时,设计器会在运行时加载和缓存它们。 由于需要扩展程序, 因此,ItineraryDsl 通过检查导出的类型和这些类型的属性,使用反射从缓存加载适用的程序集。