【问题标题】:Resolve singleton object from several threads从多个线程解析单例对象
【发布时间】:2015-11-10 03:21:05
【问题描述】:

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

我能解决这个问题吗?

更多详情: 我认为问题的一部分可能是我在一个线程中注册了一个新的类型映射。尽管我已经同步了调用,但 UnityContainer 似乎保留了对之前构建的项目的引用,并将其提供给调用解析的线程。注册新类型映射的线程得到新项目就好了。

【问题讨论】:

  • 愚蠢的问题,但让我们澄清一下:容器是跨所有线程共享还是每个线程都有自己的实例?
  • 整个应用程序只设置了一个容器。
  • 能否请您补充一些详细信息,添加代码sn-p好

标签: c# .net unity-container


【解决方案1】:

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

简单:两种不同类型的注册 = 两种不同的“单例”。

【讨论】:

  • 谢谢,这意味着我需要实现自己的生命周期管理器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多