我对文档中的这句话很感兴趣。
对于隐式或显式定义的范围内的每个请求,a 将返回该服务的单个实例,该实例将返回 在范围结束时予以处理。
退出使用块时实际发生了什么。如果我的服务不是IDisposable,那么对象是否会停止缓存并随后为GC释放?
using(container.BeginLifetimeScope())
{
myServiceThatDoesNotImplementIDisposable;
}
由于
答案 0 :(得分:2)
退出使用区块时实际发生的事情
当在作用域上调用Dispose时(当你离开使用块时会发生什么),在该作用域中缓存的所有一次性组件也被处理掉,所有创建的作用域实例(一次性和非一次性)的缓存都被清除。这使得这些对象有资格进行垃圾收集。
同样适用于单身人士,尽管他们的范围是在容器的整个生命周期内。它们在容器被处理时被丢弃,并且当它们的容器实例时会被收集垃圾。
另一方面,瞬态实例永远不会被容器跟踪。这意味着它们不是缓存中的存储。创建后,容器会立即忘记它们。