插件式以其身优势广为开发者所喜爱,本人参与开发过的几个项目都用到了插件式的概念。 最近几天不是很忙, 抽空重新梳理了一下逻辑, 将业务部分剥离, 便有了此版的插件式的开发框架。 希望通过此代码能与大家交流技术,探讨问题,也希望大家提出宝贵意见。
- 概念 插件: 插件是可独立完成某个或一系列功能的模块.通常插件由宿主程序加载,不能独立运行。 宿主: 宿主是承载插件运行的环境,为插件提供基本服务。通常插件由宿主程序管理和控制。 插件式: 通常是由开发人员编写宿主程序,并预先定义好系统提供基本服务接口和插件接口。然后由其他开发人员根据系统插件接口编写插件功能。通常插件以一个独立功能模块的形式出现。对于宿主程序来说并不知道插件的具体功能,通常宿主启动时检索插件信息,并根据预定的插件接口装载插件。
- 优势 增强系统扩展性: 在系统发布后可在不必重新编译系统的前提下按需对系统功能进行扩充。 易维护及复用性: 插件通常为独立的功能模块易于管理与维护,并可在多个业务系统中重用。
声明: 此代码仅为学习之用, 可自由转载或使用, 但希望使用者尽量保留文件头部信息以保证后续开发者能及时反馈. 本人不保证代码的正确性及安全性.
项目结构 - Addin 目录为框架核心代码
- Addin.HostDemo 目录为宿主实现(演示)
- Addin.PackageDemo 目录为插件实现(演示)
- Addin.Services 目录为基础服务接口(演示)
主要类型及接口 - IHost 宿主接口
- PackageHost 插件宿主抽象类(此抽象类实现IHost接口,并提供插件管理功能. 定制基于业务的插件宿主应从此类继承)
- IPackageServiceProvider 插件服务提供者接口(由此接口实现者提供插件服务)
- DictionaryServiceProviderAdapter IServiceProvider接口适配器(提供从Dictionary到IServiceProvider的转换)
- IPackageProvider 插件提供者接口(由此接口实现者提供插件源)
- FilePackageProvider 文件插件提供者实现
- IPackageManager 插件管理器接口
- PackageManager 插件管理器实现
- IPackageController 插件控制器接口
- PackageController 插件控制器实现
- IPackage 插件接口(由此接口实现插件功能)
目录结构 view source
print?
│ │ IConfigurationInitialize.cs |
│ │ IPackageController.cs |
│ │ IPackageServiceProvider.cs |
│ │ PackageControllerCollection.cs |
│ │ PackageDescription.cs |
│ │ DictionaryServiceProviderAdapter.cs |
│ │ FilePackageProvider.cs |
│ │ Addin.HostDemo.csproj |
│ │ Addin.HostDemo.csproj.user |
│ │ CommandBarItemCollectionAdapter.cs |
│ │ CommandBarManagerAdapter.cs |
│ │ CommandBarMenuAdapter.cs |
│ │ Addin.PackageDemo.dll |
│ │ Addin.PackageDemo.dll.config |
│ │ Addin.PackageDemo.csproj |
│ ICommandBarCollection.cs |
│ ICommandBarItemCollection.cs |
│ ICommandBarSeparator.cs |
|