ASP.Net MVC контроллер имен массива

голоса
9

Я заметил, что расширение MapRoute включает в себя перегрузку, которая принимает строку [] параметр, который называется «Пространства имен». Я читал, что Google был для меня на ней, и якобы это поможет рамки поиска контроллеров в местах, не иначе выглядят.

Я сделал некоторое Прокалывание, и попытался положить контроллеры в странных местах. Я поставил один в папке Scripts; Я даже построил один в отдельной сборке с отдельным корневым пространством имен.

Без сдачи anyting в парах пространств имен, все работало нормально. Если я ставлю только один из пространств имен в Парах пространств имен, он еще нашел все мои контроллеры. Я подумал, что было бы использовать этот массив неоднозначность между одноименными контроллерами, но этого не произошло либо. HomeController в MyProj.Controllers и один в SomeOtherName.Stuff будет сталкиваться еще.

Так что мой вопрос, является устаревшим, что параметр? Или он по-прежнему используется как-то так, что у меня есть еще различить?

Задан 06/04/2009 в 15:26
источник пользователем
На других языках...                            


2 ответов

голоса
5

Итак, после дальнейшего тестирования, я понял, что это не фильтр, точно, но это своего рода тоже. Я дал вам «ответ» кредит, даже если вы частично правы.

Таким образом, он, в конце концов, действовать, как я думал, что он должен что сказать, что это устраняет неоднозначность. В основном, логический поток что-то вроде этого:

  • Посмотрите на пространство имен в _cache, который соответствует одному в массиве пространств имен
    • если что нашел, обратите внимание на контроллер правого имени
    • - если это нашел, вернуть его
    • - если он не найден, вернитесь искать везде, что бы нормально выглядеть
  • если он не найден, искать везде оскорбление

Так, в общем, моя мысль, что массив имен будет служить неоднозначности была правильной. Причина мой первый тест в этой связи не удалось, что это только делает идеальный матч, и я сделал ошибку, используя только корень п / с от узла (в других wordss, MyRoot вместо MyRoot.Controllers).

Что это пространства имен вещи позволяет, то есть иметь HomeController в двух разных пространствах имен и сопоставить их по-разному в зависимости от URL или Params.

Ответил 06/04/2009 в 20:37
источник пользователем

голоса
4

Нет, это значение не рекомендуется. Он используется в DefaultControllerFactory.cs. Обратите внимание, что если значение подается, она полностью заменяет стандартное имя пространство искало. Если параметр не задан, пространство имен искало наш определяется:

HashSet<string> nsDefaults = new HashSet<string>(ControllerBuilder.DefaultNamespaces, StringComparer.OrdinalIgnoreCase);

Если параметр указан, список вы поставляете заменяет это значение.

В любом случае, DefaultControllerFactory звонки:

GetControllerTypeWithinNamespaces(controllerName, nsDefaults);

... со списком, либо тот, который вы поставки, или по умолчанию. Таким образом, очевидно, что значение поддерживается.

Когда вы смотрите на исходный код там, и в ControllerTypeCache, вы можете увидеть реальную цель ценности пространств имен: Это не вызывает контроллер завод , чтобы посмотреть в местах , которые иначе не могли бы выглядеть; а это фильтр . Другими словами, он предотвращает завод контроллера по умолчанию из перспективных и пространства имен , что было бы в противном случае искать для контроллеров.

Ответил 06/04/2009 в 15:52
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more