В том же решении есть приложение ASP.NET MVC4 Slick.App
и библиотека классов Awesome.Mvc.Lib
. Awesome.Mvc.Lib содержит один класс контроллера.Контроллер в отдельной сборке и маршрутизации
public class ShinnyController : Controller
{
[HttpGet]
public string Index()
{
return "Hello, from Awesome.Mvc.Lib";
}
}
Если я просто добавить ссылку из Slick.App в Awesome.Mvc.Lib, запустить приложение и точка Брауэр в /shinny
, я на самом деле увидеть ответ «Привет из Awesome.Mvc.Lib».
Это то, чего я не ожидаю вообще. Все время я думал, что ASP.NET MVC уважает пространства имен, в которые помещаются контроллеры. Таким образом, контроллеры из других пространств имен не отображаются, по крайней мере, до того, как я не просил.
Я попытался изменить учетную запись по умолчанию, чтобы использовать параметр namespaces.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new [] { "Slick.App.Controllers" }
);
Тем не менее, маршрут ShinnyController по-прежнему соответствует «/ shinny».
У меня проблемы, это правильное поведение по умолчанию. Мой вопрос в том, как явным образом сказать, какие контроллеры выставлены, и предотвратить использование маршрута по умолчанию для соответствия контроллерам в отдельной библиотеке классов?
Unfortunatelly, это не совсем то, что моя проблема. Моя проблема в том, что у меня нет доступа к хост-приложению, поэтому создание фабрики настраиваемых контроллеров для меня не сработает. –
@alexanderb: Нет, вы можете сделать это, используя это: [сборка: System.Web.PreApplicationStartMethod (typeof (MvcTools.Hooks.PreApplicationStartCode), «Пуск»)], см. Эту ссылку: http: //blog.davidebbo. com/2011/02/register-your-http-modules-at-runtime.html В начале вы делаете это: System.Web.Mvc.ControllerBuilder.Current.SetControllerFactory (YOUR_ControllerFactory)); Все, что вам нужно сделать, это заставить приложение-хост загружать вашу DLL, чего вы можете достичь с помощью записи web.config;) –