构建可扩展的应用程序
如果可扩展的应用程序预编程为查询指定的接口,则它可以在运行时确定类型是否可以被激活。一旦验证测试通过,类型便可以支持额外的接口,为它们的功能提供多种结构。
示例:
目标:学习简单的接口编程过程,使用反射、特性将外部程序集在运行时加载到内存中并使用
第一步:新建解决方案
两个项目文件
MExtendableApp是主项目,CommonSnappableTypes是扩展项目(提供接口标准、公司信息描述、功能信息描述)
接下来,我们来写主项目
主界面非常简单
对Form进行初始化
首先,我们要在运行时加载第三方扩展插件,就要知道第三方插件所存的位置,这里我们在运行程序的同目录下新建一个文件夹用于存放第三方插件的程序集文件。程序集文件中并非所有的类都实现了接口IAppFunctionality,判断哪些第三方自定义类型实现了接口IAppFunctionality。
接下来,对实现了接口IAppFunctionality的类型进行操作:找到这些类中的DoIt方法,并获取定义在DoIt方法上的特性。将这些方法(在编写这些代码的时候无法知道第三方会定义什么样的类名,但可以使用里氏替换原则创建类型对象并以接口类型返回)。
最后,我们定义事件。这里有个非常值得注意的地方:如何在事件中创建类型对象,调用类型对象的方法呢?sender就是事件的发起者,也就是toolstripmenuitem,通过它的tag属性可以将接口类型对象传入事件,有了对象,就可以调用对象的方法了。
这样一个可扩展的应用程序就写好了。
接下来,我们做个第三方的应用进行测试。
这里的测试非常简单,首先,第三方公司从官网上下载扩展标准程序集文件,即,在解决方案文件夹中新增文件夹Reference,将程序集放入文件夹中,接下来就可以进行开发,记得先添加程序集文件。