Если вам действительно нужно сохранить имена контроллеров и HomeController, я вижу простое решение для использования хака, например:
routes.MapRoute(
null,
"{home}/{action}/{id}",
new { controller = "Home", action = "Index", home="Home", id = UrlParameter.Optional });
routes.MapRoute(
null,
"{home}/{action}/{id}",
new { controller = "Home", action = "Index", home="Users", id = UrlParameter.Optional }
);
И вы можете получить доступ к этим действиям как по URL, так и с помощью RenderAction:
@{Html.RenderAction("JustATest","Home", new {home="Home"});}
@{Html.RenderAction("JustATest","Home", new home="Users");}
Но я думаю, что проблема искусственная (потому что это сложнее, чем вы себе представляете), и вы используете средства только для использования средств, но не для решения реальной проблемы.Для реальной архитектуры плагинов вам необходимо создать как минимум: 1. Пользовательское ограничение маршрута для проверки того, что тип контроллера относится к сборке, где был определен контроллер.2. Установщик, который установит все маршруты независимо от основного приложения. 3. Создайте модульные тесты для каждого приложения плагина. Маршруты, чтобы убедиться, что все маршруты, установленные из плагинов, которые ничего не знают друг о друге, работают должным образом (и нене ломайте друг друга).
Я рекомендую взять ваши контроллеры в главном веб-приложении и дать им разные имена.