Unity 2.0:IDisposable对象的Unity RegisterInstance
默认情况下,RegisterInstance使用ContainerControlledLifetimeManager。处理Unity容器时,它会调用实例上的Dispose(如果IDisposable)。
在我而言,这不是我想要的。该实例由另一个班级拥有并处理;统一应该注入参考。所以我用:
container.RegisterInstance(instance, new ExternallyControlledLifetimeManager());
的统一文件(下理解终身经理)指出:
使用RegisterInstance方法 在 注册现有对象的结果相同的行为,如果你只是 注册与 RegisterType寿命容器。因此, 建议使用除 对于其中 RegisterInstance被调用线程 非默认一生的经理,当你不使用 RegisterInstance方法来注册 现有对象。
这是什么意思?
同一节还规定:
如果您注册使用 RegisterInstance方法的对象的现有实例 , 返回相同的情况下为所有 呼叫的容器解决或ResolveAll或当 依赖机制将 实例注入其他类,提供 表示以下情况之一为真:
- 您指定您使用了默认的生命周期管理器
- 您解决在您使用不同的 一生经理注册时的 实例相同的上下文的容器控制的一生经理
- 。
我尝试使用RegisterInstance与ExternallyControlledLifetimeManager后解决在不同的线程,和它的工作 - 我得到了单一实例。
我的代码与创建实例注册部分中的示例相匹配。不过,我想确保我理解上下文警告。
为了清楚起见,我总是希望Unity容器注入我注册的实例,而不管线程等,我做而不是想让Unity处置掉它。我是否正确地做这件事?
相关:http://stackoverflow.com/questions/5129789/unity-2-0-and-handling-idisposable-types-especially-with-perthreadlifetimemanage – 2011-03-16 19:36:56