由于更改配置文件需要重新启动应用程序(即使不会,路由仅在启动时注册,而不是在每个请求时注册),我不明白为什么路由注册(用于启动?)不能在库中“只是用于路由”(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
}
}
Run Code Online (Sandbox Code Playgroud)
该类不必是 webui 项目的一部分,但可以位于单独的 dll 中。MVCTurbine 自动加载(并调用)bin 文件夹中的库中的 IRouteRegistrator 和 IServiceRegistrator 的所有实现(不必引用)。而且,据我所知,没有什么可以阻止您通过将 IRouteRegistrator 实现中包含新路由的 dll 添加到应用程序的 bin 文件夹来添加新路由。这样,您可以“即时”添加新路由,而不会危及应用程序的其余部分(如果发生意外情况,新的 dll 很容易被删除)。
如果您不能或不愿意使用 MVC Turbine,您可以使用此概念通过将路由集合从 global.asax 传递到动态加载的库(仅包含具有路由方法的类)来“提取”路由注册到外部 dll登记。
以此(无论是否为 MVCTurbine)为起点,如果需要,您可以轻松地将 xml 或 txt 配置文件读取到 foreach 循环中以获取常见路由,但该方法将仅限于简单路由,因为它很困难(复杂,但并非不可能)以文本形式表示任何更复杂的路由配置。
归档时间: |
|
查看次数: |
3795 次 |
最近记录: |