Указатель NULL
- это тот, который указывает на никуда. Когда вы разыскиваете указатель p
, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p
является нулевым указателем, местоположение, хранящееся в p
, является nowhere
, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception
.
В общем, это потому, что что-то не было правильно инициализировано.
ОБНОВИТЕ причину, это происходит, то, что, когда изображение указано в файле 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(/.*)?"})
Я предполагаю, что Вы запрашиваете статический файл, такой как файл JavaScript, который не был добавлен к Вашему проекту, или возможно ссылка на него имеет опечатку. Необходимо контролировать веб-запросы браузеров и искать веб-запросы на это, правильно не решают в статический файл, когда они должны. Можно использовать поджигателя в FF или скрипача при использовании IE, чтобы сделать это.