nopcommerce的挂件技术

  nopcommerce有着完善的插件处理机制。开发人员可以预先开发好独立运行的模块,在通过自身的插件机制即可加载实现该插件功能。这种插件模式有利于模块化编程,提高扩展性以及降低模块之间的耦合度。下面,我们将添加一个自定义的插件Demo并介绍如何管理插件。

1.新建类库项目:右键“添加”--“新建项目”--“类库”。默认的规则是”Nop.Plugin.{Group}.{Name}”。{Group}表示插件的分类(如支付、挂件(Widget)),{Name}是你的插件名 (”HelloWorld”),该Demo中的名字就是“Nop.Plugin.Widgets.HelloWorld”。

2.指定文件输出路径:右键文件属性。将文件的输出路径改为\Presentation\Nop.Web\Plugins\Widgets.HelloWorld。注意区分Plugins文件下的插件。

3.添加dll引用如图。右键dll文件属性,“复制到本地”改为"false"。这样可以避免生成许多不必要的dll文件到输出路径。

4:添加描述文件。文件的格式可以参考其他插件。我的Description文件如下:

Group: Widgets
FriendlyName: HelloWorld
SystemName: Widgets.HelloWorld
Version: 1.00
SupportedVersions: 1.00
Author: Jayson
DisplayOrder: 1
FileName: Plugin.Widgets.HelloWorld.dll
Description: A test program

右键该文件“属性”--“复制到本地”--“如果较新时复制”。保证该文件为最新。web.config文件可直接复制其他插件的。

5:实现插件接口“IWidgetPlugin”、“BasePlugin”。“IWidgetPlugin”继承自“IPlugin”,“IPlugin”是插件操作的最终接口,因为这个demo是划分在“挂件”(小部件。 Widget是呈现在您的网站的某些部分,主页的banner图就是挂件技术实现的)里的所以继承“IWidgetPlugin”,具体代码如下:

 public class HelloWorldPlugin : BasePlugin, IWidgetPlugin
    {
        public HelloWorldPlugin() { }
        public void GetConfigurationRoute(out string actionName, out string controllerName, out System.Web.Routing.RouteValueDictionary routeValues)
        {
            actionName = "Configure";
            controllerName = "WidgetsHelloWorld";
            routeValues = new RouteValueDictionary() { { "Namespaces", "Nop.Plugin.Widgets.HelloWorld.Controllers" }, { "area", null } };
        }

        public void GetDisplayWidgetRoute(string widgetZone, out string actionName, out string controllerName, out System.Web.Routing.RouteValueDictionary routeValues)
        {
            actionName = "PublicInfo";
            controllerName = "WidgetsHelloWorld";
            routeValues = new RouteValueDictionary()
            {
                {"Namespaces", "Nop.Plugin.Widgets.HelloWorld.Controllers"},
                {"area", null},
                {"widgetZone", widgetZone}
            };
        }

        public IList<string> GetWidgetZones()
        {
            return new List<string>() { "home_page_helloworld" };
        }

        /// <summary>
        /// 安装插件
        /// </summary>
        public override void Install()
        {
            base.Install();
        }

        /// <summary>
        /// Uninstall plugin
        /// </summary>
        public override void Uninstall()
        {
            base.Uninstall();
        }
    }6:添加控制器、模型以及视图,文件结构如下:。Controller负责响应一个ASP.NET MVC网站提出的请求,代码如下:
  public WidgetsHelloWorldController() { }
        [ChildActionOnly]

        public ActionResult Configure()
        {
            return View("~/Plugins/Widgets.HelloWorld/Views/WidgetsHelloWorld/Configure.cshtml");
        }
        [HttpPost]
        [ChildActionOnly]
        public ActionResult Configure(ConfigurationModel model)
        {
            return Configure();
        }
        [ChildActionOnly]
        public ActionResult PublicInfo(string widgetZone, object additionalData = null)
        {
            return View("~/Plugins/Widgets.HelloWorld/Views/WidgetsHelloWorld/PublicInfo.cshtml", null);
        }
当请求控制器时,会跳转到对应指定的视图。该程序中,视图文件只是做简单的演示,并不复杂,“PublicInfo”视图文件如下:
@model Nop.Plugin.Widgets.HelloWorld.Models.PublicInfoModel
@{
    Layout = "";
}
@using System

<div class="con" style="font-weight:bold; color:red;">
    <ul>
        <li>HelloWorld Nopcommerce</li>
        <li>HelloWorld Nopcommerce</li>
        <li>HelloWorld Nopcommerce</li>
        <li>HelloWorld Nopcommerce</li>
        <li>HelloWorld Nopcommerce</li>
        <li>HelloWorld Nopcommerce</li>
    </ul>
</div>
注意:需要保持视图文件实时更新。右键“Views”文件夹中的视图文件,选择“较新时复制”这样,一个简单的挂件类型的插件就开发完成了。在前台调用,添加“ @Html.Widget("home_page_helloworld")”,注意“home_page_helloworld”需要和上文“HelloWorldPlugin ”中“GetWidgetZones”返回值一致,否则找不到挂件的
显示效果图如下:
时间: 2024-10-21 08:22:59

nopcommerce的挂件技术的相关文章

Nopcommerce主要用到的技术及特点

很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们的技术能力.所以我最近决定写一个"nopCommerce源码架构详解"的系列,来详细剖析NopCommerce的架构和原理. Nopcommerce主要用到的技术及特点: 1.Entity Framework 2.ASP.NET mvc 3.IoC容器+依赖注入(Autofac) 4.使用

我的NopCommerce之旅(2): 系统环境及技术分析

1.系统环境 IIS7.0 or above ASP.NET 4.5(MVC 5.0) .NET Framework 4.5.1 or above VS 2012 or above 2.架构设计 Pluggable modular/layered architecture Inversion of Control(IOC,控制反转) and Dependency Injection(DI,依赖注入) 3.开发技术 Entity Framework,及其CodeFirst ASP.NET MVC

NopCommerce 框架系列(二)

这一篇,让我们一起来认识一下 NopCommerce 的整体目录结构 1. Libraries 文件夹目录: (1)Nop.Core:核心库,包含了大量可重用代码,和系统业务无关,可以单独抽取出来,放到其他项目中也可使用.里面包含了依赖注入组件,Cache,业务对象等内容 (2)Nop.Data:包含一系列的数据访问类和方法以从数据库或其他数据媒介读取和保存数据.它也有助于把数据访问逻辑和你的业务对象分离.nopcommerce使用Entity Framework (EF) Code-First

技术创新成直播主战场,“直播+云”将成就新独角兽

(上图为腾讯集团高级执行副总裁.社交网络事业群总裁汤道生) 2016年被普遍认为是直播"风口"爆发的元年.根据中国互联网信息中心于2017年1月发布的第39次<中国互联网络发展状况统计报告>,截止到2016年12月国内直播用户达到3.44亿人,占国内网民的47.1%,网络直播业务呈出强大的营收能力,资本持续涌入. 在资本的推动下,直播独角兽开始出现.2016年,斗鱼完成由腾讯领投的B轮.C轮融资,将估值推向百亿元,创业不满3年的斗鱼也在2016年实现了10亿元的直播收入,成

Portal.MVC —— nopcommerce的简化版

Portal.MVC 简介 项目是基于MVC4+EF,带有角色,权限,用户中心及账户相关(登录,注册,修改密码,找回密码等)等基本功能.参考的开源项目 nopcommerce,这是一个电商架构的MVC项目,我对其进行了简化,之前主要是方便我自己搭建一些小的网站.包含前台和后台. 界面浏览 1.首页.这是前天晚上临时做出来的Logo和页面.不是真实案例,大家可以结合实际项目再修改. 2.登录框 2.注册框 3.邮箱密码找回,这个地方要用还需要配置邮箱服务器. 4.用户中心 4.后台管理,使用的Ma

NopCommerce源码架构详解--初识高性能的开源商城系统cms

很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从中学习很多企业系统.软件开发的规范和一些新的技术.技巧,可以快速地提高我们的技术能力.所以我最近决定写一个“NopCommerce源码架构详解”的系列,来详细剖析NopCommerce的架构和原理. Nopcommerce主要用到的技术及特点: 1.Entity Framework 2.ASP.NET mvc 3.IoC容器+依赖注入(Autofac) 4.使用EF中的E

1.NopCommerce下载与安装

NoCommerce是基于微软ASP.NET MVC + EntityFramework 技术开发的一套开源电子商城系统,其架构与设计非常精妙被誉为.NET商城的经典之作. 作为一个.NET程序爱好者,通过学习NopCommerce,不仅可以提高自身的技术水平,而且设计思想也会更上一层楼,所以我写下NopCommerce系列文章,让更多的和我一样的朋友能够一起学习研究!同时也希望通过通过对NopCommerce的研究与学习结识更多的有缘人!我们的QQ群:331511286 1.NopCommer

NopCommerce功能与特点介绍

[本文转自]http://www.cnblogs.com/nopcommerce-b2c/p/3758676.html 前两节我们主要介绍了NopCommerce下载与安装和NopCommerce中文语言包,让大家体验一下NopCommerce.这次我们主要来介绍NopCommerce的功能与特点. NopCommerce被誉为.NET领域最好的电子商务网站,开源且免费(需在网站底部保留NopCommerce版权标识),如果感觉NopCommerce太碍眼也可以交个50刀去除版权限制. NopC

nopCommerce 数据缓存

为了提高一个系统或网站的性能和IO吞吐量,我们一般都会采用缓存技术.当然NopCommerce也不例外,本文我们就来给大家分析一下nop中Cache缓存相关类设计.核心源码及实现原理. 一.Nop.Core.Caching.ICacheManager Nop首先抽象出了一个缓存存储和读取相关管理接口Nop.Core.Caching.ICacheManager. namespace Nop.Core.Caching { /// <summary> /// Cache manager interf