由于配置文件的更改需要重新启动应用程序(即使不启动,路由仅在启动时注册,而不是在每个请求上注册),我没有看到为什么路由注册(用于启动?)不能在库中“仅用于路由”(Routes.dll)?
我一直在使用支持自动依赖注入/服务注册和路由注册的MVCTurbine。我使用类这样的路线登记:
public class RouteRegistrator : MvcTurbine.Routing.IRouteRegistrator
{
/// <summary>
/// Registers routes within <see cref="T:System.Web.Routing.RouteCollection"/> for the application.
/// </summary>
/// <param name="routes">The <see cref="T:System.Web.Routing.RouteCollection"/> from the <see cref="P:System.Web.Routing.RouteTable.Routes"/>.</param>
public void Register(System.Web.Routing.RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional },
new string[] { "MyNamespace.Controllers" }); // Parameter defaults
}
}
这个类并不一定是Web用户界面项目的一部分,但可以在单独的DLL。 MVCTurbine自动加载(并调用)位于bin文件夹(不必被引用)库中的IRouteRegistrator和IServiceRegistrator的所有实现。而且,据我所知,没有什么能阻止你通过添加包含新路由的IRF来添加新路由,以实现IRouteRegistrator到应用程序的bin文件夹。这样,您就可以“即时”添加新路线,而不会冒其他应用程序的风险(如果发生意外情况,新的dll很容易被移除)。
如果你不能或不愿意使用MVC Turbine,你可以使用这个概念,通过从global.asax传递路由集合到动态加载的库来“提取”路由注册到外部dll,包含(仅)类用路由注册的方法。如果需要,您可以轻松地将xml或txt配置文件读入到常见路由的foreach循环中,但该方法仅限于简单路由,因为它很难(复杂的,但并非不可能)以文本形式表示任何更复杂的路由配置。
与问题没有直接关系,但您是否考虑过持续集成的自动部署?这些可以帮助你回到家庭时间。 – Jordan
@Jordan我们有很多事情我们考虑用于部署改进,但是我没有直接控制这一点。我们在发布时必须在此处,以确保活动服务器上没有任何中断。我希望我们能够加入TeamCity,并使其自动化,但这不是我的呼叫。这些都不能解决需要立即抛出路由的问题,因为它们仍然需要等到自动发布。 – Chev