2016-08-29 8 views
0
IObjectVmFactory objectVMFactory = this.Container.Resolve<IObjectVmFactory>(); 

Это генерирует исключение NullReferenceException.Назначение генерирует System.NullReferenceException

Если я не присвоить результат this.Container.Resolve переменной, она не бросает:

this.Container.Resolve<IObjectVmFactory>().AnyMethod(...) 

Это не имеет никакого смысла для меня ... кто-то может дать мне какое-то объяснение?

Дополнительная информация:

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

Класс, реализующий IObjectVmFactory, не имеет определенного конструктора, поэтому исключение не происходит внутри реализации IObjectVmFactory.

Исключение не имеет внутренних исключений и указывает непосредственно на первую строку.

Выполнение строки непосредственно в промежуточном окне создает сообщение ('' is null).

Спасибо!

+2

Первый - это 'this.Container.Resolve ();' while second this is this.Container.Resolve (). CreateInstance (...) '. Сам код объясняет, что первый из них не создает экземпляр его, а второй. Следовательно, оно самоочевидно. – ViVi

+0

Вы уверены, что 'Container' не' null'? Откуда возникает «NullReferenceException»? – Haukinger

+0

Сначала создается экземпляр IObjectVmFactory, второй - также. Единственное отличие состоит в том, что в первом случае я назначаю экземпляр, разрешенный единством в переменной. Контейнер в порядке, но не null. –

ответ

0

Конфигурация моего проекта была в Release, а не Debug. В режиме выпуска он генерирует исключение при назначении. В отладки, он бросает на шаг после выполнения задания:

Foo member { get; } 
public Bar(Foo foo) 
{ 
    // crashes here on release 
    member = foo; 

    // crashes here in debug (foo.Collection was null) 
    foreach (var thing in foo.Collection) 
     thing.DoSomething(); 
} 

Так это выглядит, как с конфигурацией проекта в релизе, может привести к ошибке. Попробуйте переключить конфигурацию для отладки и найти, где она не работает.

Перейти к Build -> Configuration Manager

Выберите ваш проект

Изменение конфигурации из версии для отладки.

Постройте и посмотрите, произошла ли ошибка в том же месте.