nopcommerce是国外用.net开发的电商b2c开源项目,主要涉及技术包括了ef+mvc。
今天主要分析nop的插件机制。
什么是插件?插件是预先开发好的可以独立运行的功能模块,把单独的功能模块动态嵌入主项目这种模式我自称它为插件模式。
这种插件模式作用在于利于模块化编码,降低功能模块间耦合程度,增加模块功能的可扩展性。
废话扯完,现在主要说下插件的运行机制。简单总结的说,程序启动,动态加载各种插件的程序集,动态执行相应实现接口的代码逻辑。
插件主要涉及的类如下:
PluginManager----插件管理类负责 加载所有插件 记录通过文本形式安装 卸载插件记录
PluginFinder -----插件信息搜集类 负责获取插件的具体描述信息
PluginFileParser--插件工具类 负责输出插件信息
BasePlugin IPlugin 插件的接口与实现 主要包括安装和卸载以及插件描述信息的属性
程序加载前 ,先加载所有的插件,将所有插件放在一个静态变量之中,其中描述信息是从文本描述文件取的并转化成实体添加到插件集合中,后面的插件描述信息的查询都从中取之。
下面这句话,意思在global之前执行PluginManager.Initialize 加载所有插件,--这里有个添加信任文件的逻辑,现在没理解,日后补充。
[assembly: PreApplicationStartMethod(typeof(PluginManager), "Initialize")]
安装插件的逻辑:
先插入插件定义描述信息到资源表中,输出插件名字到文本中
卸载插件的逻辑 与之相反