我們嘗試在我們的MVC應用程序中構建模塊化體系結構,並將該方法與實際放置並隱藏在主應用程序的Areas文件夾下的外部DLL一起使用,但它們在解決方案中作爲獨立項目可見。所有模塊(插件)都有自己的區域註冊文件,其中包含MapRoute調用的RegisterArea方法。它適用於我們。但是,我們對這些領域/隱藏方法並不完全滿意,因爲它看起來像是某種解決方法。NopCommerce如何使用來自外部插件的路由表?
與此同時,我們找到了NopCommerce項目並下載了源代碼。我們已經知道代碼是從特殊文件夾加載所有插件DLL,但我們不明白主應用程序如何使用來自插件的路由表。我們發現代碼中的程序流通過插件的路由表,但是當我們試圖在我們的測試應用程序中做類似的事情時,即使程序流經過我們插件的路由表,它也不起作用。
其實,有在Global.asax文件下面的代碼在NopCommerce應用:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("favicon.ico");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//register custom routes (plugins, etc)
var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
routePublisher.RegisterRoutes(routes);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new[] { "Nop.Web.Controllers" }
);
}
在該代碼中有2條線我認爲是負責什麼我所要求的,但我米不確定。下面是那些2線:
//register custom routes (plugins, etc)
var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
routePublisher.RegisterRoutes(routes);
如果它關於插件路由表來實現以這種方式,也可以用另一種方式來完成?我們希望將模塊(插件)文件夾放在主MVC應用程序的結構中,並將所有模塊項目放在那裏。
如果有人對NopCommerce有更多的經驗,如果他/她可以幫助我們,那將是非常好的。
「我想有很多方法可以做同樣的事情」。請問,如果您知道建議比NopCommerce中使用的更簡單的方法嗎? – tesicg
我只是想用nopCommerce回答你的問題。我想知道「簡單」的指標是什麼。如果你提取和重新編碼,這種技術只需花20行代碼,包括花括號(我檢查了我的代碼);當然,不包括MapRoute子句本身。我認爲這很簡單。 你也可以在插件中的控制器上使用'Route'屬性,我想這很簡單。在構建插件系統時,您會發現路由不是唯一的問題。 –
查看http://docs.autofac.org/en/latest/integration/mvc。html#使用插件程序集 \t \t NopCommerce本身是插件上的主類。 –