早在2009年,可能是在Unity 2.0之前,我看到thread of discussion表明CreateChildContainer()不是线程安全的:
此外,如果使用CreateChildContainer()方法创建子容器,它们将在创建期间将其自身添加到其父容器的livetime容器中,并在处置时删除。因此,从单独的线程中处理子容器可能会导致错误,甚至每个子容器只能被一个线程访问。
Unity 2.0确实(仍)是真的吗? Unity 3.0或更高版本怎么样?
如果this article中所述,如果使用WCF实现Unity,则会特别感兴趣。我们的想法是使用子容器来轻松处理HierarchylifetimeManager实例。虽然我现在想知道是否应该使用PerRequestlifetimemanager而根本没有子容器。
答案 0 :(得分:1)
基于最新的源代码(Unity 3.5)。它应该是线程安全的。它将自己添加到父级的生命周期容器parent.lifetimeContainer.Add(this);
以及Add
的实现使用lock()
围绕其私有子级列表的修改。