惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
G
Google Developers Blog
B
Blog RSS Feed
A
About on SuperTechFans
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
D
Docker
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
Last Week in AI
Last Week in AI
H
Help Net Security
WordPress大学
WordPress大学
MyScale Blog
MyScale Blog
博客园 - Franky
人人都是产品经理
人人都是产品经理
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog

博客园 - 叶鹏

开源一个自己的作品浏览器插件ChaTab,一键提交Prompt到多个AI应用 左右手切换工具xmouse v1.2版本发布 如何做好数字乡村项目 一个2核1G内存的服务器能做什么 产品能力是一种底层能力 小团队产品研发管理V0.0.1 java作品集:企业信息门户webtap .NET作品集:基于svn 的.net 持续集成工具 .NET作品集:linux下的.net mvc cms .NET作品集:linux下的博客程序 一个切换鼠标左右手的小工具 lucene.net已经从孵化器毕业 nopcommerce计划任务分析 orchard之lucene.net索引生成 基于mvc3的razor多用户店铺模板切换设计思路 屌丝IT男 mvc3实现用户自定义二级域名 建议博客园成立中国的开源项目组织,同意的顶起 C# foreach,linq,delegate集合查询的性能比较
nopcommerce插件深度剖析
叶鹏 · 2012-05-31 · via 博客园 - 叶鹏

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

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

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

 原文来自:http://www.jqpress.com/post/178.aspx

 独立博客:http://www.jqpress.com