NopCommerce架构分析之四----插件机制
NopCommerce支持灵活的插件机制,所谓Web系统插件,其实也就是可以像原系统的一部分一样使用。
Web系统的使用方式就是客户端发送一个请求,服务端进行解析。在asp.net MVC中对客户请求的解析是通过路由的方式实现的。
所谓路由就是在客户端发生请求时,对请求路径的解析过程。
在Global.asax.cs中注册所有路由类:
- //register custom routes (plugins, etc)
- var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
- routePublisher.RegisterRoutes(routes);
IRoutePublisher:路由发布者,以主动的方式向系统添加路由。实体类为:RoutePublisher。
IRouteProvider:路由提供者,每个插件都有一个路由提供者,向系统中注册路由。
路由发布者(IRoutePublisher)通过IOC在运行环境路径中查找路由提供者,即查找所有继承IRouteProvider的类。然后有各插件的路由提供者向系统中注册此插件的路由。
PluginManager:插件管理器,负责加载插件的DLL,并保存所有插件信息。此管理器在系统初始化时开始启动并通过Initialize方法加载所有插件。
IPluginFinder:插件查找者,在使用时从插件管理器中查找插件。
每一个插件都拥有自描述文件:Description.txt; 类PluginDescriptor负责保存解析后的插件描述或者说是此描述文件的解析后实体类。
每个插件都集成IPlugin接口,插件拥有安装和卸载的功能;
~/App_Data/InstalledPlugins.txt:保存所有加载或安装了的插件;
~/Plugins:安装的插件所在目录;
~/Plugins/bin:每一个插件都会在此处建立一个备份;
NopCommerce架构分析之四----插件机制的更多相关文章
- NopCommerce架构分析(转载)
原文 一,NopCommerce架构分析之开篇 NopCommerce是.net开源项目中比较成熟的一款业务应用框架,也是电子商务系统中的典范.所以很想多学习一下里面的设计和实现方式. 二,NopCo ...
- NopCommerce架构分析之一----依赖类生成容器
NopCommerce为了实现松耦合的框架设计目的,使用了IOC框架:Autofac.据有人测试,Autofac是性能好的IOC工具. 1.在IOC中,组件首先需要在IOC中注册,有通过配置文件注册的 ...
- Struts2架构分析和执行机制
实例分析 1.在浏览器中输入url地址后,会通过http协议发送给tomcat,tomacat收到请求后查看訪问的是哪个 webapplication(例如以下图的Struts2_0100_Intro ...
- NopCommerce架构分析之六------自定义RazorViewEngine
系统中对Razor的支持包括两部分,其中之一就是自定义RazorViewEngine 一.自定义RazorViewEngine 在Global.asax.cs的Application_Start方法中 ...
- NopCommerce架构分析之三---数据库初试化及数据操作
系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载. IStartupTask调用IEfDataProvider进行数据库的初始化. IEfDataProvide ...
- nopCommerce架构分析系列(二)数据Cache
原文(http://www.cnblogs.com/gusixing/archive/2012/04/12/2443799.html)非常感谢作者顾思行的分享! 序言 在很多访问量较大的系统中,尤其在 ...
- NopCommerce架构分析之八------多语言
系统支持的语言是有类:Language表示: 多语言资源对应的类为:LocalizedProperty: 当先选择某种语言存储在类中:GenericAttribute: 多语言可以导出为XML文件,当 ...
- NopCommerce架构分析之五------Model绑定Action参数
asp.net MVC中Action参数不只是一些基本类型,也支持实体参数.那么从客户端传来的数据如何映射或转换成实体对象呢?就是通过实体绑定类ModelBinder.此系列类在请求转化为后台Cont ...
- NopCommerce架构分析之参考资料
http://www.cnblogs.com/RobbinHan/archive/2011/11/30/2269537.html 依赖注入框架Autofac的简单使用 http://www.cnblo ...
随机推荐
- easy ui easyui-linkbutton 禁用、启用
<a id="btn_update_Shop" name="btn_update_Shop" class="easyui-linkbutton& ...
- Ubuntu Linux启用root用户登录
Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...
- 解决mybatis查询返回结果值串查
方式一: 通过as 指定 大写重名列的 别名 方式二: 命名数据库中表名时 每个表的主键 id 要起不同的名称, 避免主键重复(但是子表的外键可以和主表的id主键重名, 你想啊, 从表的外键性质不就是 ...
- 在DataTable中执行DataTable.Select("条件")
.在DataTable中执行DataTable.Select("条件")返回DataTable: // <summary> // 执行DataTable中的查询返回 ...
- Elasticsearch升级至1.x后API的变化-三
请支持原创:http://www.cnblogs.com/donlianli/p/3841762.html 1.索引格式 1.x之前的版本,被索引的文档type会同时出现在url和传输的数据格式中 ...
- 2326: [HNOI2011]数学作业 - BZOJ
首先是DP,分段DP(按位数讨论) 然后每一段构造出它对应的矩阵,用矩阵快速幂加速 type matrix=..,..]of int64; var n,m:int64; a,b,c,d:matrix; ...
- 使用Unity拦截一个返回Task的方法
目标 主要是想为服务方法注入公用的异常处理代码,从而使得业务代码简洁.本人使用Unity.Interception主键来达到这个目标.由于希望默认就执行拦截,所以使用了虚方法拦截器.要实现拦截,需要实 ...
- spoj 2178
好水...... #include<cstdio> #include<cstdlib> #include<cstring> #include<algorith ...
- uva 825
这个......小学生就会的 坑在输入输出了 两个数之间可能不止一个空格....wa了好几遍啊 #include <cstdio> #include <cstring> # ...
- AlphaGo 已经战胜了李世石,而你还不知道什么是机器学习?
谷歌人工智能 AlphaGo 与韩国棋手李世石 3 月 15 日进行了最后一场较量,最终比赛结果为 AlphaGo 4:1 胜李世石,人机围棋大战巅峰对决至此落幕.我不知道大家有没有被震撼到,反正我的 ...