3

我从结构映射中得到以下异常-“为类型的实例 d54e25dc-d19c-4d70-99d1-56bd2502d203 检测到重复对象......”

堆栈跟踪是:

at StructureMap.InstanceCache.Set(Type pluginType, Instance Instance, Object result) in c:\code\structuremap\Source\StructureMap\InstanceCache.cs:line 60
at StructureMap.BuildSession.CreateInstance(Type pluginType, Instance instance) in c:\code\structuremap\Source\StructureMap\BuildSession.cs:line 159
at StructureMap.BuildSession.<>c_DisplayClass3.<.ctor>b_1() in c:\code\structuremap\Source\StructureMap\BuildSession.cs:line 34
at StructureMap.BuildSession.CreateInstance(Type pluginType) in c:\code\structuremap\Source\StructureMap\BuildSession.cs:line 192
at StructureMap.BuildSession.GetInstance[T]() in c:\code\structuremap\Source\StructureMap\BuildSession.cs:line 78

此异常仅偶尔发生,并且很难重现。

到目前为止我发现了什么:

  • 调用ObjectFactory.Container.GetInstance(type)将创建一个BuildSession带有新的非静态缓存的新缓存。
  • 调用将到达BuildSession.CreateInstance(Type pluginType, Instance instance),但缓存中还没有实例。(https://github.com/structuremap/structuremap/blob/master/Source/StructureMap/BuildSession.cs#L149-166
  • 现在我们继续_builder.Resolve(pluginType, instance, this);
  • 在某个地方Resolve(),对象将进入缓存,稍后CreateInstance我们再次将其保存到缓存中,接收到异常。

该对象配置了单例生命周期。该应用程序是托管在 IIS 中的 WCF 服务。

感谢您对查找原因的任何帮助。

4

0 回答 0