gpt4 book ai didi

c# - IUnityContainer.CreateChildContainer() 抛出 NullReferenceException

转载 作者:行者123 更新时间:2023-11-30 19:56:27 26 4
gpt4 key购买 nike

我们有一个使用 Unity 2.1.505.0 的应用程序。我们的应用程序使用 Web.API 和自定义 DependencyResolverAdapter 来为我们的 API Controller 启用依赖注入(inject)。在这个适配器中,我们调用 IUnityContainer 上的 CreateChildContainer() 方法。但是,此调用间歇性地抛出一个 NullReferenceException:

NullReferenceException on CreateChildContainer() call

此方法在什么情况下会抛出 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)

奇怪的是,在执行“Clean Solution”后,应用程序可以正常运行大约 20-30 秒; Controller 由 Unity 正确解析,解析器似乎正在完成它的工作。然后抛出 NullReferenceException,并且在应用程序的剩余生命周期中没有 Controller 被成功解析。重新运行应用程序(不先清理)会在第一次解析 Controller 时立即导致此错误。

最佳答案

如果您查看 code对于 UnityContainer..ctor(UnityContainer parent) ,唯一一个NullReferenceException的地方可能发生在这条线上:

parent.lifetimeContainer.Add(this);

if (parent != null) 里面, 所以这里唯一可以为 null 的是 parent.lifetimeContainer . lifetimeContainerInitializeBuilderState 中初始化,它是从构造函数中调用的,唯一设置它的地方是在 Dispose 中。方法。

所以这个错误很可能是因为父容器已经被释放了。

这可能是 Unity 中的一个错误; CreateChildContainer应该检查容器是否已经被处理,并抛出 ObjectDisposedException如果有的话。

关于c# - IUnityContainer.CreateChildContainer() 抛出 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33836251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com