我想从不同的线程解析同一个对象。但是当我在一个线程中处理(拆除)一个对象并在另一个线程中解析它时,我得到两个不同的对象,尽管该对象需要在整个应用程序中是一个单例。 LifetimeManager是一个ContainerControlledLifetimeManager,其行为应该像一个单例,但是当我有多个线程时它不会。
我该怎么办?
更多细节: 我认为问题的一部分可能是,我在一个线程中注册了一个新的类型映射。虽然我已经同步了调用,但UnityContainer似乎在之前构建的项目上有一个引用,并将它提供给调用resolve的线程。注册新类型映射的线程可以很好地获取新项目。
答案 0 :(得分:1)
ContainerControlledLifetimeManager
将解析后的实例保存在私有非静态字段中。它通常被称为单例,但实际意义是每个生命周期管理器实例的单例。再次注册类型后,它将获得ContainerControlledLifetimeManager
的新实例,并且此生命周期管理器实例将保留其自己的已解析类型实例。
简单:两种不同类型的注册=两个不同的“单身人士”。