我們有一個使用Unity 2.1.505.0的應用程序。我們的應用程序使用Web.API和自定義DependencyResolverAdapter
爲我們的API控制器啓用依賴注入。在這個適配器內部,我們撥打方法IUnityContainer
。但是,此調用間歇拋出NullReferenceException
:IUnityContainer.CreateChildContainer()拋出NullReferenceException
在什麼情況下該方法拋出一個NullReferenceException?堆棧跟蹤不顯露任何明顯的原因:
at Microsoft.Practices.Unity.UnityContainer..ctor(UnityContainer parent)
at Microsoft.Practices.Unity.UnityContainer.CreateChildContainer()
at MyApp.DependencyResolverAdapter.BeginScope() in C:\ResCollection\CropProtection\MyApp\MyApp\DependencyResolverAdapter.cs:line 43
at System.Net.Http.HttpRequestMessageExtensions.GetDependencyScope(HttpRequestMessage request)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator)
at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
奇怪的是,做一個「清理解決方案」之後,應用程序正常工作約20-30秒;控制器由Unity正確解決,解析器似乎正在完成其工作。然後引發NullReferenceException
,並且在應用程序的其餘生命週期內沒有成功解析控制器。在第一次解決控制器時,重新運行應用程序(不先清理)會導致此錯誤。
「重新運行應用程序(不首先清理)」清理回收ASP.NET工作。重建部分在這裏不是關鍵。殺w3wp.exe完成同樣的事情。這看起來像是一些國家的腐敗。可能是一個線程錯誤。任何線程問題? – usr
可能重複[什麼是NullReferenceException,我該如何解決它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-doi-i-fix-it) – dotctor
這對我來說是因爲我有一個IHttpHandlerFactory使用與WebApi DependencyResolver相同的容器。一旦我的IHttpHandlerFactory.ReleaseHandler()處理了容器,WebApi控制器就開始失敗。 解決方案是給處理程序一個單獨的容器。幸運的是,我不需要任何應用程序範圍的單身人士或任何東西。 – wtjones