从多个线程中解析单个对象

时间:2011-03-11 14:07:44

标签: c# .net unity-container

我想从不同的线程解析同一个对象。但是当我在一个线程中处理(拆除)一个对象并在另一个线程中解析它时,我得到两个不同的对象,尽管该对象需要在整个应用程序中是一个单例。 LifetimeManager是一个ContainerControlledLifetimeManager,其行为应该像一个单例,但是当我有多个线程时它不会。

我该怎么办?

更多细节: 我认为问题的一部分可能是,我在一个线程中注册了一个新的类型映射。虽然我已经同步了调用,但UnityContainer似乎在之前构建的项目上有一个引用,并将它提供给调用resolve的线程。注册新类型映射的线程可以很好地获取新项目。

1 个答案:

答案 0 :(得分:1)

ContainerControlledLifetimeManager将解析后的实例保存在私有非静态字段中。它通常被称为单例,但实际意义是每个生命周期管理器实例的单例。再次注册类型后,它将获得ContainerControlledLifetimeManager的新实例,并且此生命周期管理器实例将保留其自己的已解析类型实例。

简单:两种不同类型的注册=两个不同的“单身人士”。