ninject和企业库服务定位器相关的程序集

时间:2011-09-29 12:24:09

标签: c# ninject enterprise-library

我将Microsoft.Practices.ServiceLocation程序集与ninject结合使用以帮助提供服务。我将我的ninject内核注册到servicelocator提供程序方法:

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

以上代码在安装了企业库的计算机上都能正常工作(通过msi可执行文件)。我无法在生产中运行安装程序,所以我在bin目录中本地有dll,希望这可以工作。但它不起作用。我没有得到任何程序集未找到异常,而是我得到一个对象引用未设置异常调用:'at Microsoft.Practices.ServiceLocation.ServiceLocator.get_Current()'。

我已经在一些地方读过这个程序集没有任何依赖http://msdn.microsoft.com/en-us/library/ff664422%28v=PandP.50%29.aspx并且本地dll应该可以做到这一点,但它似乎没有。

我已经在几个盒子上进行了测试,并且错误一直发生,直到我运行安装程序。有趣的是,在我卸载库之后,它仍然可以工作(我想它已缓存在某个地方)。

有没有人有任何问题类型的经验?

1 个答案:

答案 0 :(得分: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);