Контроллер не загружен из другой сборки? - PullRequest
5 голосов
/ 25 марта 2012

Я пытаюсь загрузить Controller из другой сборки, но я застрял здесь.

У меня есть два проекта:

  1. Веб-приложение
  2. Библиотека классов

В веб-приложении я определил Route:

routes.MapRoute("Root", "root/{Action}", 
                  new {Controller = "Root", Action = "Index" });

Теперь, когда я нажимаю следующий URL, маршрут совпадает, однако выдается ошибка 404. Кто-нибудь может сказать мне, почему это происходит? (p.s. RootController находится в библиотеке классов)

http://webapp/root

Я пытался добавить фабрику пользовательских контроллеров:

public class ControllerFactory : DefaultControllerFactory {
    protected override IController GetControllerInstance(RequestContext reqContext, Type controllerType)
    {
        // reqContext.Route is correct and has the "Root" route loaded
        // controllerType seems to be null ??

        // if I break execution here and manually set controllerType to
        // typeof(ClassLibrary.RootController) and continue from there,
        // then everything works as expected... 

        // So this method is being called without controllerType... but why??
    }
}

Я также попытался добавить свойство namespaces к маршруту:

routes.MapRoute("Root", "root/{Action}", 
              new {
                Controller = "Root", 
                Action = "Index", 
                Namespaces = new[] { typeof(RootController).Namespace }                     
              });

1 Ответ

4 голосов
/ 25 марта 2012

После долгих отладок и разочарований я обнаружил, что класс контроллера был объявлен private, который не работает в сценарии.

Несмотря на то, что мой ControllerFactory находится в одном и том же пространстве имен, классы, которые создают кэши контроллера , - нет. Таким образом, запрос к GetControllerInstance, который выполняется базовым классом DefaultControllerFactory, не может найти класс RootController.

Объявление RootController как public решает проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...