зависимые сборки локатора службы ninject и enterprise - PullRequest
1 голос
/ 29 сентября 2011

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

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

Приведенный выше код прекрасно работает на машинах, на которых установлена ​​корпоративная библиотека (через исполняемый файл msi). Я не в состоянии запустить установщик в производстве, поэтому у меня есть локальная библиотека DLL в каталоге bin, надеясь, что это будет работать. Однако это не работает. Я не получаю никаких сборок не найденных исключений, вместо этого я получаю ссылку на объект, не устанавливающую исключение из вызова to: 'at Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current ()'.

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

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

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

1 Ответ

1 голос
/ 04 октября 2011

проблема оказалась в том, что 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...