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

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里添加插件
插件名稱不能重復,可以自定義。這里我的取的名字和插件項目名稱相同沒什么特殊要求。
后台插件預覽就可以看到了。