依赖注入声明周期
# 依赖注入声明周期
服务注册的三种类型:
- Transient:需要时创建新实例
- Scoped:可以为每个新作用域创建一个新实例
- Singleton:第一个请求上创建一个新实例,并且在应用程序的剩余生命周期中,将相同的实例提供给所有使用者类。
推荐做法:
- 范围服务通常应由单个Web请求/线程使用。因此,不应该在线程之间共享服务范围。
- 配置为单例的服务可能会导致应用程序中的内存泄漏。
- 内存泄漏通常是由单例服务引起的。这是因为创建的实例不会被丢弃,它将保留在内存中直到应用程序结束。因此,一旦不使用它们,最好将它们释放。
- 将服务注册为临时服务会缩短其使用寿命,通常可能不太在乎多线程和内存泄漏。
- 不要在单例服务中依赖瞬态或作用域服务。因为瞬时服务在单例服务注入时成为一个单例实例,并且如果瞬态服务不旨在支持这种情况,则可能导致问题。在这种情况下,ASP.NET Core的默认DI容器已经引发异常。
上次更新: 2023/05/09, 17:54:37