与.Net依赖注入相比,Angular中的依赖注入

时间:2019-11-18 00:55:12

标签: .net angular dependency-injection

我来自.NET背景,只是一个关于Angular依赖注入的问题。

在.NET / .NET Core中,有三种不同的服务生存期:瞬态,作用域和单例。但是对于Angular,它只有等效的“ Singleton”,我的理解正确吗?如果是,为什么Angular不提供其他服务类型,例如“ Transient”?

1 个答案:

答案 0 :(得分:2)

从技术上讲,Angular中的所有服务均为scoped。但是,它们的范围可以是:

  1. Root-在所有模块和组件之间共享由root提供(或注入到AppModule中)的服务实例。这就是我们所说的 singleton ,范围是root(整个应用)。
@Injectable({
  providedIn: 'root',
})
  1. 模块-延迟加载的模块中提供的服务的实例在模块的组件之间共享。这也是一个单个,但范围仅限于一个模块。
@NgModule({
  ...
  providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }]
})
  1. 组件-注入组件的服务实例仅在该组件存在时才存在。一旦对该组件进行了存储,该服务的实例也将被销毁。同一组件的多个实例各自具有自己的服务实例。
@Component({
  ...
  providers: [{ provide: ItemService, useValue: { name: 'lamp' } }]
})

文档的这一部分介绍了注入的层次结构:https://angular.io/guide/dependency-injection#configure-an-injector-with-a-service-provider