【发布时间】:2017-05-26 10:18:11
【问题描述】:
我们尝试在我们的 MVC 应用程序中构建模块化架构,并使用这种方法与实际上放置和隐藏在主应用程序的区域文件夹下的外部 DLL,但它们在解决方案中作为单独的项目可见。所有模块(插件)都有自己的区域注册文件,其中包含 MapRoute 调用的 RegisterArea 方法。它对我们有用。但是,我们对这种区域/隐藏方法并不完全满意,因为它看起来是某种解决方法。
与此同时,我们找到了 NopCommerce 项目并下载了源代码。我们发现代码正在从特殊文件夹加载所有插件 DLL,但我们不了解主应用程序如何使用插件中的路由表。我们发现代码程序流在哪里通过插件的路由表,但是当我们尝试在我们的测试应用程序中做类似的事情时,即使程序流通过了我们插件的路由表,它也不起作用。
实际上,在 NopCommerce 应用程序的 Global.asax 文件中有如下代码:
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 行负责我所要求的,但我不确定。这是这两行:
//register custom routes (plugins, etc)
var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
routePublisher.RegisterRoutes(routes);
应该以这种方式处理插件的路由表还是可以以其他方式完成?我们希望将 Modules (Plugins) 文件夹从主 MVC 应用程序的结构中移除,并将所有模块项目放置在其中。
如果有人对 NopCommerce 有更多经验,如果他/她可以帮助我们,那就太好了。
【问题讨论】: