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架构分析之(七)主题Theme皮肤管理器
IThemeContext:皮肤上下文,支持桌面皮肤和移动段皮肤.其实体类为:ThemeContext; IThemeProvider:皮肤提供者,其实体类为ThemeProvider;皮肤提供者从皮肤配置文件中解析配置项,加载系统提供的所有皮肤方案,系统默认提供桌面干净皮肤(~/Themes/DefaultClean)和移动端皮肤(~/Themes/Mobile).ThemeConfiguration是对theme.config数据的解析对象. IThemeContext从IThemeProv
-
基于nopCommerce的开发框架 附源码
.NET的开发人员应该都知道这个大名鼎鼎的高质量b2c开源项目-nopCommerce,基于EntityFramework和MVC开发,拥有透明且结构良好的解决方案,同时结合了开源和商业软件的最佳特性.官网地址:http://www.nopcommerce.com/,中文网:http://www.nopcn.com/.下载后前后端展示如下.如果你还未了解过该项目,建议从官网下载代码后在本地运行查看效果. 笔者使用该框架开发过不少项目,总的来说,方便简洁,集成了.NET开发许多常用的组件和功能.一
-
NopCommerce架构分析(一)Autofac依赖注入类生成容器
NopCommerce为了实现松耦合的框架设计目的,使用了IOC框架:Autofac.据有人测试,Autofac是性能很好的IOC工具. 1.在IOC中,组件首先需要在IOC中注册,有通过配置文件注册的.像Spring.net,也有通过特性注册的,像StructureMap,也有通过代理来注册的,像Autofac.但是IOC讲究一个原则,就是接口和实现分离.所有IOC就是生命某个具体类实现了某个接口.然后在使用时,系统从IOC中获取接口的实现类,并创建对象. 2.下面来看NopCommerce如
-
NopCommerce架构分析之(五)Model绑定Action参数
asp.net MVC中Action参数不只是一些基本类型,也支持实体参数.那么从客户端传来的数据如何映射或转换成实体对象呢?就是通过实体绑定类ModelBinder.此系列类在请求转化为后台Controller的Action方法前,捕获传递过来的数据,并对其进行解析和转换,最终为实体类对象. 在系统启动前,Global.asax.cs中的方法Application_Start方法调用下面代码定义参数转换规则. //model binders ModelBinders.Binders.Add(t
-
NopCommerce架构分析之(三)EntityFramework数据库初试化及数据操作
系统启动时执行任务:IStartupTask,启动时执行的任务主要是数据库的初始化和加载. IStartupTask调用IEfDataProvider进行数据库的初始化. IEfDataProvider,SqlCeDataProvider:获取数据连接工厂,不同类型数据库,连接工厂不同. 接口IStartupTask的实体类EfStartUpTask的实现如下: public class EfStartUpTask : IStartupTask { public void Execute() {
-
NopCommerce架构分析之(八)多语言支持
系统支持的语言是有类:Language表示: 多语言资源对应的类为:LocalizedProperty: 当先选择某种语言存储在类中:GenericAttribute: 多语言可以导出为XML文件,当然也支持导出. IWorkContext及其实体类WebWorkContext为当前运行上下文:用户的登录信息以及一些上下文环境设置都保存在此类中. 具体包括:当前用户信息:CurrentCustomer:当前用户Cookie:货币:语言:税的类型:供应商等: 展现多语言资源的方式有几种: 一.在自
-
使用Nopcommerce为商城添加满XX减XX优惠券功能
公司的电商网站要做个优惠券的功能,nop框架,但我接触nop时间不多,最后还是为了功能而完成了.这中间肯定有很多小问题. Nopcommerce自带的促销功能感觉不是很好,首先优惠券功能放在购物车页面的,如果直接下单就用不了优惠.其次nop的优惠还必须要输入优惠券码很麻烦,最后不满足现在电商主流的单笔订单满XX减XX优惠券功能.但是nop提供了很多基础的方法,我们只要稍作更改就可以达到我们想要的. 优惠券首先需要和用户挂钩,用户可以领取和查看自己的优惠券.优惠券的功能nop基本已经实现了,但是没
-
NopCommerce架构分析之(六)自定义RazorViewEngine和WebViewPage
系统中对Razor的支持包括两部分,其中之一就是自定义RazorViewEngine 一.自定义RazorViewEngine 在Global.asax.cs的Application_Start方法中,注册了自定义视图引擎: //remove all view engines ViewEngines.Engines.Clear(); //except the themeable razor view engine we use ViewEngines.Engines.Add(new Themea
-
NopCommerce架构分析之(四)基于路由实现灵活的插件机制
NopCommerce支持灵活的插件机制,所谓Web系统插件,其实也就是可以像原系统的一部分一样使用. Web系统的使用方式就是客户端发送一个请求,服务端进行解析.在asp.net MVC中对客户请求的解析是通过路由的方式实现的. 所谓路由就是在客户端发生请求时,对请求路径的解析过程. 在Global.asax.cs中注册所有路由类: //register custom routes (plugins, etc) var routePublisher = EngineContext.Curren
-
解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
本文的写作冲动来源于今晚看到的老赵的一则微博"大家知道System.Collections.Generic.List<T>是一种什么样的数据结构?内部的元素是怎么存放的?还有Dictionary<TKey,TValue>呢?-". 查了一下书,如果参考数据结构和算法里介绍的线性表合哈希表的特点,非常官方的答案就类似:List<T>是一种线性的内存连续分配的存储结构,元素是顺序存放的:它的优点是内存连续分配,相对节省空间,在设定长度范围内增加元素开销很
-
解析高可用Redis服务架构分析与搭建方案
基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP).订阅发布(PUB/SUB)系统等等.规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用. 不过任何一个基础服务的提供方,都会被调用方问起的一个问题是:你的服务是否具有高可用性?最好不要因为你的服务经
-
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
一.简介 Viewer.js 是一款强大的图片查看器. Viewer.js 有以下特点: 支持移动设备触摸事件 支持响应式 支持放大/缩小 支持旋转(类似微博的图片旋转) 支持水平/垂直翻转 支持图片移动 支持键盘 支持全屏幻灯片模式(可做屏保) 支持缩略图 支持标题显示 支持多种自定义事件 Viewer.js 提供了纯 JS 版本和 jQuery 版本,版本名字虽然一样,但代码不一样,不能通用. 二.下载 纯JS版本: 下载地址:https://github.com/fengyuanchen/
随机推荐
- javascript实现控制浏览器全屏
- NT完全入侵教程(新手篇)
- 详谈Java几种线程池类型介绍及使用方法
- iOS CoreAnimation 图层几何学
- 原生js实现倒计时--2018
- JavaScript模板引擎Template.js使用详解
- php中实现获取随机数组列表的自定义函数
- 深入理解基于vue-cli的vuex配置
- 网站前端和后台性能优化的34条宝贵经验和方法
- Android调用微信登陆、分享、支付
- PHP简单日历实现方法
- JS验证全角与半角及相互转化的介绍
- js 设置css的定位
- jQuery获得字体颜色16位码的方法
- jQuery、zepto、js常用小技巧
- jquery.uploadView 实现图片预览上传功能
- C#设计模式编程中运用适配器模式结构实战演练
- 简单的python协同过滤程序实例代码
- Python实现的rsa加密算法详解
- 搭建一个nodejs脚手架的方法步骤