zoukankan      html  css  js  c++  java
  • 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

    View Code
    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里添加插件

    插件名称不能重复,可以自定义。这里我的取的名字和插件项目名称相同没什么特殊要求。

     后台插件预览就可以看到了。

  • 相关阅读:
    Kafka 生产者 自定义分区策略
    同步互斥
    poj 1562 Oil Deposits(dfs)
    poj 2386 Lake Counting(dfs)
    poj 1915 KnightMoves(bfs)
    poj 1664 放苹果(dfs)
    poj 1543 Perfect Cubes (暴搜)
    poj 1166 The Clocks (暴搜)
    poj 3126 Prime Path(bfs)
    处理机调度
  • 原文地址:https://www.cnblogs.com/chjf2008/p/2785428.html
Copyright © 2011-2022 走看看