带有一次性组件的强制依赖项



我正在读一本书,书中说当保持超出预期生命周期的依赖引用时,强制依赖是一个问题,例如,您将瞬态服务(a)注入到作用域服务(B)的构造函数中作为其依赖项,因为B持有a的引用,这会延迟a的处置

我能理解这种问题。让我们考虑另一个场景,A和B都是一次性的(实现IDisposable接口),您将一个限定范围的服务(B)注入到一个瞬态服务(A)中,这在技术上不会导致强制依赖。但是当第一次被GC处理(依次调用终结器的调用处理),其处理方法被调用,从而调用B的处理方法(因为电话必须依赖项的处理方法本身时处理设计规则),所以B的本机资源将被释放,但这里是抓,如果B也注入到另一个服务C这取决于B, C就会不正常工作以来依赖B alread被释放。那么为什么我看到的所有的书都只提到了强制依赖,所有的书都说你不能注入寿命较短的依赖但是没有书说你不能注入寿命较长的依赖当这些类型是一次性的? 我的理解是否错了,我提到的问题实际上不会发生?我很困惑

只有当您是对象的所有者(或者在某些时候所有权被显式地转移)时才调用dispose。在很多情况下,您可能会得到一个您使用的寿命较长的依赖项(例如,服务),而您不负责处理它。假设服务的生命周期是由创建该服务的其他人管理的。这是很常见的。

假设你放弃了那个寿命较长的服务,而GC确定没有其他人持有该服务,那么它将调用应该在该服务上调用Dispose的终结器,从而清理该对象。

如果你感兴趣的话,参考计数在COM时代是手动完成的,现在主要封装在GC中。

最新更新