Пользовательская фабрика контроллеров, проблемы внедрения зависимостей и структурных карт в ASP.NET MVC

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

27
задан kitsune 5 April 2009 в 20:55
поделиться

2 ответа

ОБНОВИТЕ причину, это происходит, то, что, когда изображение указано в файле CSS, и что изображение пропускает попытки платформы маршрутизации отобразить URL на контроллер. Игнорирование маршрутов, как упомянуто ниже предотвратит ошибку, но я решил не реализовать его, потому что это - хороший способ быть уведомленным, что у Вас есть недостающий ресурс.

Вы видите подробное объяснение наряду с примерами установки внедрения зависимости с помощью Карты Структуры здесь.

У меня была та же проблема, и я думаю, что понял это. По любой причине каждый раз, когда Вы пытаетесь обеспечить свою собственную Фабрику Контроллера, необходимо добавить несколько дополнительных определений IgnoreRoute. Первая вещь, которую я сделал бы, добавляет эта строка к Вашему методу GetControllerInstance:

if(controllerType == null)
    return base.GetControllerInstance(controllerType)

Это, по крайней мере, даст Вам больше информации в сообщении об ошибке относительно того, что запрос, это заставляет controllerType быть пустым. В моем особом случае у меня было фоновое изображение в моем наборе файла CSS как это:

background: url(img/logo.gif);

Таким образом, то, что происходит, является маршрутизацией, ищет контроллер, названный "img" и действием, которое берет logo.gif или что-то вдоль тех строк. Это - очевидно, не корректное поведение.

После некоторого рытья я понял, что должен был добавить определение IgnoreRoute своему файлу Global.asax, который проигнорирует что-либо в каталоге "содержания" моего сайта как это:

routes.IgnoreRoute("{Content}/{*pathInfo}");

Я все еще не уверен, почему Вы не должны делать этого с ControllerFactory по умолчанию, но тем не менее он работает.

Вы, вероятно, столкнетесь с той же проблемой с favicon.ico. Особенно, если Вы использование Google crhome. Необходимо будет добавить это также:

routes.IgnoreRoute("{*favicon}", new {favicon=@"(.*/)?favicon.ico(/.*)?"})
45
ответ дан Micah 28 November 2019 в 05:10
поделиться

Я предполагаю, что Вы запрашиваете статический файл, такой как файл JavaScript, который не был добавлен к Вашему проекту, или возможно ссылка на него имеет опечатку. Необходимо контролировать веб-запросы браузеров и искать веб-запросы на это, правильно не решают в статический файл, когда они должны. Можно использовать поджигателя в FF или скрипача при использовании IE, чтобы сделать это.

4
ответ дан Joel Cunningham 28 November 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: