Ответ 1
Как для изменения файла конфигурации требуется перезагрузка приложения (и даже если это не так, маршруты регистрируются только при запуске, а не при каждом запросе), я не вижу причин, по которым регистрация маршрута (для начала?) не может быть в библиотека "только для маршрутизации" (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
}
}
Этот класс не должен быть частью проекта webui, но может быть в отдельной dll. MVCTurbine автоматически загружает (и вызывает) все реализации IRouteRegistrator и IServiceRegistrator, которые находятся в библиотеках в папке bin (не нужно ссылаться). И, как я знаю, ничто не мешает вам добавлять новые маршруты, добавляя dll, которая содержит новые маршруты при реализации IRouteRegistrator в папку bin приложения. Таким образом, вы можете добавлять новые маршруты "на лету", не рискуя остальным приложением (новая dll легко удаляется, если что-то неожиданное происходит).
Если вы не можете или не будете использовать MVC Turbine, вы можете использовать эту концепцию для "извлечения" регистрации маршрута во внешнюю dll путем передачи коллекции маршрутов из global.asax в динамически загружаемую библиотеку, содержащую (только) класс с метод регистрации маршрута.
При этом (MVCTurbine или нет) в качестве отправной точки, если необходимо, вы можете легко прочитать файл конфигурации xml или txt в цикле foreach для общих маршрутов, но этот метод будет ограничен простыми маршрутами, поскольку он является сложным (сложным, но не невозможно) представить более сложную конфигурацию маршрута в тексте.