сборки, зависящие от локатора служб ninject и enterprise library

#c# #ninject #enterprise-library

#c# #ninject #enterprise-библиотека

Вопрос:

Я использую Microsoft.Практика.Сборка ServiceLocation в сочетании с ninject для устранения сбоев в обслуживании. Я регистрирую свое ядро ninject в методе поставщика servicelocator:

 var kernel = new StandardKernel();
//do bindings
var locator = new NinjectServiceLocator(kernel);
ServiceLocator.SetLocatorProvider(() => locator);
  

Приведенный выше код отлично работает на машинах, на которых установлена enterprise library (через исполняемый файл msi). Я не в состоянии запустить установщик в рабочей среде, поэтому у меня есть dll локально в каталоге bin, надеясь, что это сработает. Однако это не работает. Я не получаю никаких исключений, не найденных в сборке, вместо этого я получаю исключение ссылки на объект, не установленное при вызове: ‘в Microsoft.Практика.Расположение службы.ServiceLocator.get_Current()’.

Я читал в нескольких местах, что у этой сборки нет никаких зависимостей http://msdn.microsoft.com/en-us/library/ff664422(v=PandP.50).aspx и локальная библиотека dll должна сделать свое дело, но, похоже, этого не происходит.

Я протестировал несколько блоков, и ошибка возникает постоянно, пока я не запущу программу установки. Интересно, что после удаления библиотеки она все еще работает (я предполагаю, что она где-то кэшируется).

У кого-нибудь есть опыт работы с типом проблемы?

Ответ №1:

проблема оказалась в том, что servicelocator.current был пуст, потому что в одном из модулей привязки, которые я автоматически регистрировал, отсутствовала dll. поскольку загрузчик вызывался из global.asax, у меня была обработка ошибок, которая должна была регистрировать любые исключения и продолжаться (не хотелось бы, чтобы весь сайт останавливался для этой одной страницы). итак, я никогда не получал ошибку reg, и мой загрузчик терпел неудачу, не сообщив мне.

 var kernel = new StandardKernel();
//do bindings -> throw error here without reaching below two lines to regiester the service locator
var locator = new NinjectServiceLocator(kernel);
ServiceLocator.SetLocatorProvider(() => locator);