nopcommerce中文网

nopcommerce是国外asp.net领域一个高质量的b2c开源项目,基于EntityFramework和MVC开发,QQ群1:75272942(2000人超级群,已满) QQ群2:640322459

导航 - 搜索

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

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

 

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

 

nopCommerce的源代码结构和架构分析

编写本文档是为了向程序员说明nopcommerce的解决方案结构,亦是程序员开发nopcommerce的居家必备良书。首先 nopcommerce的源代码很容易拿到,它是开源的,所以你可以直接到网上下载。 在你打开VS以后项目和文件夹都会完整列出来,我们建议你在看此文档的同时也打开你的VS来浏览项目和文件。

绝大多数的项目,目录和文件都顾名思义,你可以从名字就大概知道是做什么的。比如Nop.Plugin.Payments.PayPalStandard这个我都不用看项目代码就能猜到做什么的。
\Libraries\Nop.Core
Nop.Core项目包含nopcommerce的一系列核心类如缓存,事件,辅助类和业务对象(如订单和客户实体类)
\Libraries\Nop.Data
Nop.Data 项目包含一系列的数据访问类和方法以从数据库或其他数据媒介读取和保存数据。它也有助于把数据访问逻辑和你的业务对象分离。 nopcommerce使用Entity Framework (EF) Code-First方法,允许你在nopcommerce代码中定义实体 (所有的核心实体类都在Nop.Core中定义),再让EF生成数据库,这就是为什么会叫Code-First。你接下来可以用LINQ来查询对象,它自 己会把查询转换为SQL语句并在数据库里执行。nopcommerce拥有牛B的API让你完全定制持久映射,你可以在这儿和这儿找到Code- First的资料。
\Libraries\Nop.Services
此项目包含一系列的核心服务,业务逻辑,验证,如果有数据的话还有数据的计算方法,也就是传说中的业务访问层(BAL)

\Plugins\ 文件夹中的那些项目

Plugins 是VS的解决方案文件夹,硬盘中它是在你解决方案的根目录下。由于项目在编译时的输入路径是”..\..\Presentation \Nop.Web\Plugins\{Group}.{Name}\”,这样插件的DLL会自动地放到 \Presentation\Nop.Web\Plugins\文件夹中,用来放置已部署插件。这样也能让插件包含静态文件比如CSS或JS,就不用在项 目之间拷贝这些文件了。

\Presentation\Nop.Admin

Nop.Admin是一MVC项目,如果你还从没用过ASP.NET MVC,请猛击这儿有更多信息。可能你已经猜到这是表示层中的管理后台,你可以在 \Presentation\Nop.Web\Administration文件夹中找到它,此项目不能运行。

\Presentation\Nop.Web

Nop.Web也是一MVC项目,前台网店的表示层,这个才是你真正要跑起来的项目,它也是整个应用程序的起始项目。

\Presentation\Nop.Web.Framework

Nop.Web.Framework是一个表示层的类库项目,包括可以让后台和前台使用的一些共用的展示功能。

\Test\Nop.Core.Tests

Nop.Core.Tests是Nop.Core的测试项目

\Test\Nop.Data.Tests

Nop.Data.Tests是Nop.Data的测试项目

\Test\Nop.Services.Tests

Nop.Services.Tests是 Nop.Services的测试项目

\Test\Nop.Tests

Nop.Tests是一个类库,包含其它测试项目中要用的一共有类和辅助方法,此项目不包含任何测试用例