2011-09-29 52 views
1

我正在使用Microsoft.Practices.ServiceLocation程序集与ninject一起帮助服务位置。注册我ninject内核到服务定位提供方法:ninject和企业库服务定位器相关的程序集

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

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

我读过几个地方,这个程序集没有任何依赖关系http://msdn.microsoft.com/en-us/library/ff664422%28v=PandP.50%29.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);