我是ASP.NET的新手,我正在考虑为不同的主题创建多个前端区域的方法。但是区域路由会发生冲突,所以我需要手动加载我想用作活动前端主题的相关区域。
我想要不同的区域,而不仅仅是可以共享模型和控制器的视图集(使用自定义RazorViewEngine轻松实现),因为模型/控制器可能会因每个主题而有所不同。
可以这样做吗?或者我可以用另一种方式做到这一点吗?
所以我没有AreaRegistration.RegisterAllAreas
而是注册后端区域和其中一个前端区域(即使有多个可用)。
答案 0 :(得分:2)
在得到答案方面收效甚微,决定在这里发布我的解决方案并遗憾地回答我自己的问题。
鉴于AreaRegistrations
的不稳定加载顺序,我最终将AreaRegistration.RegisterAllAreas();
替换为:
static void RegisterArea<AR>(RouteCollection routes, object state)
where AR : AreaRegistration
{
var registration = Activator.CreateInstance(typeof(AR)) as AreaRegistration;
var context = new AreaRegistrationContext(registration.AreaName, routes, state);
var namespaceset = registration.GetType().Namespace;
if (!string.IsNullOrEmpty(namespaceset))
{
// Important to relatively resolve Controllers
context.Namespaces.Add(namespaceset + ".*");
}
registration.RegisterArea(context);
}
这是我使用代码的方式:
RegisterArea<Areas.Backend.BackendAreaRegistration>(RouteTable.Routes, null);
RegisterArea<Areas.Frontend.FrontendAreaRegistration>(RouteTable.Routes, null);
这允许您手动决定Areas
的顺序。当{*anything}
路由中的Frontend
指令可能最终在Backend
路由之前加载时,尤其有用。