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

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

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

  • 相关阅读:
    Fastjson
    react 使用createContext、Consumer 及 useContext 、Class.contextType父子组件共享数据
    使用useReducer 实现 todoList
    react中 useMemo与useCallback使用
    react17 函数组件 使用 better-scroll2.0 封装方法 及 使用
    react 执行 yarn build ,无法直接打开dist文件下的index
    react-redux 持久数据存储
    document.body.removeChild 获取到 symbol 标签
    react嵌套路由,并设置默认子路由
    Vagrant环境下配置node_exporter、mysqld_exporter、prometheus、grafana
  • 原文地址:https://www.cnblogs.com/chjf2008/p/2785428.html
Copyright © 2011-2022 走看看