nopcommerce插件深度剖析
nopcommerce插件机制是相当优秀的,所以就分析一下然后拿来所用,集成到自己的网站架构里。写篇小文记录一下。不足和错误之处还望指正,nop版本2.5
1.Nop.Core.Plugins核心文件夹
文件目录:
这里面是Plugins的基类文件夹,实现插件机制的核心部分。
IPluginFinder.cs接口:
获取插件的信息接口,在ioc里的Nop.Web.Framework.DependencyRegistrar注册此接口。
系统启动的时候会加载到内存里。
//plugins
builder.RegisterType<PluginFinder>().As<IPluginFinder>().InstancePerHttpRequest();
IPlugin.cs:
插件的操作接口,主要有设置插件的属性信息,安装插件接口,卸载插件接口。
BasePlugins.cs 实现IPlugin.cs的方法。
PluginDescriptor.cs 插件的实体类,包含了插件的版本、描述,类型,文件名称,作者,等等一系列状态。
PluginFileParser。cs 包含对插件的实体操作方法,主要是写入插件的描述信息。
PluginFinder.cs 加载所有的插件,并获取它们的信息.
PluginManager.cs 插件管理的主类,看里面的注释,它的插件机制应该是参考的Umbraco这个cms的。
2.自定义插件
在这里我演示一个空的插件,本来是写抓取程序的,时间关系,没有做 了。插件名称,Nop.Plugin.Crawler
第一步:新建一个类库项目,而不是mvc应用项目。
第二步:在你的项目里添加需要的文件夹和文件:
Controllers,必选,控制器
Models,可选,如果你的项目很简单的话。
Views,可选但是一般情况下都需要有个界面的,放razor模板的.
Description.txt,这个必须要,插件的版本描述信息。内容如下
Group: Crawler
FriendlyName:Crawler
SystemName: Nop.Plugin.Crawler
Version: 1.00
SupportedVersions: 2.50
Author: nopCommerce team
DisplayOrder: 1
FileName: Nop.Plugin.Crawler.dll
在它上面点右键设置属性,如下图
Notes.txt ,这个是插件的备注信息,描述了插件的文件位置和一些注意事项。
RouteProvider.cs,路由文件,继承自Nop.Web.Framework.Mvc.Routes.IRouteProvider
using System.Web.Mvc; using System.Web.Routing; using Nop.Web.Framework.Mvc.Routes;namespace Nop.Plugin.Crawler {public partial class RouteProvider : IRouteProvider{public void RegisterRoutes(RouteCollection routes){routes.MapRoute("Nop.Plugin.Crawler","Plugins/Crawler/Index",new { controller = "Crawler", action = "Index" },new[] { "Nop.Plugin.Crawler.Controllers" });}public int Priority{get{return 0;}}} }
web.config,.net配置文件。
CrawlerController.cs 在我的控制器里定义了一个返回简单页面的方法。
using System.Web.Mvc; using Nop.Web.Framework.Controllers;namespace Nop.Plugin.Crawler.Controllers {[AdminAuthorize]public class CrawlerController : Controller{public ActionResult Index(){return View("Nop.Plugin.Crawler.Views.Index");}} }
大家注意了,返回的View里的view路径是插件里的视图路径,在view的Index.cshtml点右键设置的属性,cshtml是编译到dll里的
还有整个插件的属性,在插件项目上点右键设置输出属性
最后设置引用进来的dll文件属性。这样输出dll文件的时候不会把其他乱七八糟的文件也拷贝过来了。
在插件上点右键生只输出这三个文件
3.最后一步在Nop.Web的InstalledPlugins.txt里添加插件
插件名称不能重复,可以自定义。这里我的取的名字和插件项目名称相同没什么特殊要求。
后台插件预览就可以看到了。
原文来自:http://www.jqpress.com/post/178.aspx
独立博客:http://www.jqpress.com
转载于:https://www.cnblogs.com/jqbird/archive/2012/05/31/2528479.html
nopcommerce插件深度剖析相关推荐
- 唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理
上一篇 唯一插件化Replugin源码及原理深度剖析–唯一Hook点原理 在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化.hook系统ClassLoader.插件的 ...
- 《AngularJS深度剖析与最佳实践》一1.1 环境准备
本节书摘来自华章出版社<AngularJS深度剖析与最佳实践>一书中的第1章,第1.1节,作者 雪狼 破狼 彭洪伟,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...
- 《AngularJS深度剖析与最佳实践》一 2.4 控制器
本节书摘来自华章出版社<AngularJS深度剖析与最佳实践>一书中的第2章,第2.4节,作者 雪狼 破狼 彭洪伟,更多章节内容可以访问云栖社区"华章计算机"公众号查看 ...
- 从零开发一款轻量级滑动验证码插件(深度复盘)
关注并将「趣谈前端」设为星标 每天定时分享技术干货/优秀开源/技术思维 github地址: https://github.com/MrXujiang/react-slider-vertify 之前一直 ...
- 【云驻共创】华为云云原生之Kubernetes网络架构原理深度剖析(上)
文章目录 前言 一.Kubernetes诞生背景 1.云原生的概念 2.云原生架构 3.Kubernetes(k8s) 二.Kubernetes基本网络模型剖析 1.概念厘清 1.1 二层桥接 VS ...
- 云原生钻石课程 | 第2课:Kubernetes 技术架构深度剖析
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...
- 深度剖析E680G开发三.移植OPIE操作系统(上)
深度剖析E680G开发三.移植OPIE操作系统(上) 草木瓜 20060918 一.前言 凡事我图写的文章,往往比较内容纵深,范围却很窄,注重实际操作.原因 很简单,水平有限,还达不到 ...
- 云原生钻石课程 | 第5课:Kubernetes存储架构原理深度剖析(下)
点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 本篇文章来自<华为云云原生王者之路训练营>钻 ...
- 物联网新零售项目 售货机“五脏六腑”深度剖析
第9章 售货机"五脏六腑"深度剖析 课程目标 理解售货机业务 完成嵌入式数据库h2集成开发 完成售货机emqt集成开发 完成售货机和服务器数据同步,价格变动,出货,补货等业务开发 ...
最新文章
- 如何通过 Scratch 教小朋友编程思维?
- 六 装饰模式(Decorator)——设计模式学习笔记
- Atitit 常用sdk 模块 组织架构切分 规范与范例attilax总结
- win10系统的定位服务器,Win10系统无法开启定位功能的原因及解决方法
- 《天天数学》连载34:二月三日
- 铜陵高考2021年成绩查询,滁州高考成绩查询入口2021
- 软件测试为什么要学python_第一章 为什么要学习软件测试
- office2007卸载不干净 无法安装office64位的版本
- 2021Java春招面试:看完这篇文终于搞明白了
- Nodejs 微信加密消息开发
- STM32F030C8T6 IAP 开发记录
- java 中文分词转拼音_java 支持分词的高性能拼音转换工具, 速度是 pinyin4j 的两倍...
- 【OpenCV】中的鱼眼相机及其标定
- Linux——MySQL高可用-PXC架构
- QQ和360干起来了,中国互联网2大服务商进行白刃战
- 面试不慌,拿这70张思维导图,怒怼面试官
- java和ansys,HumanResourceManSys
- EAS 销售出库单上的部门 显示规则
- 深度技术 GHOST XP SP3 快速装机专业版 V9.9
- 让gitee支持SVN
热门文章
- 计算机出现全部英文如何解决,电脑打开后出现很多英文怎么处理
- linux dma 拷贝内存数据_原来 8 张图,就可以搞懂「零拷贝」了
- 2020-08-03 手动编译Qt库(msvc2019版本)
- 正版Fiddler下载地址
- [短评]企业裁员行为对整个社会的正面意义
- 浅析GDAL库C#版本支持中文路径问题
- 插上翅膀,让Excel飞起来
- Flutter之Windows环境搭建
- 记一次mysql_query(): xxx is not a valid MySQL-Link resource
- Go操作MySql Memache Mongodb