在哪些情况下使用“provide”和“useClass”会有用吗?

时间:2017-11-19 18:05:57

标签: angular dependency-injection

根据Angular Docs,您可以在需要提供者时注入不同的对象。当我找到这样做的充分理由时,我发现的唯一信息如下:

  

假设旧组件依赖于OldLogger类[...],但由于某种原因,您无法更新旧组件以使用它。

我仍然怀疑。在某些情况下,为什么我无法更新旧组件?如果组件指令期望一个类而我们注入另一个类并不危险?使用provideuseClass至关重要的情况是什么?

2 个答案:

答案 0 :(得分:4)

在我的情况下,当我需要实现除angular提供的默认类之外的不同逻辑时,我会使用它。例如,ErrorHandler是用于处理Angular 2+中的错误的默认类,但我喜欢使用我的自定义类来处理错误所以我使用

{ provide: ErrorHandler, useClass: MyErrorHandler }

它将告诉angular使用MyErrorHandler类而不是ErrorHandler

答案 1 :(得分:2)

useClass用于提供替代实施

{ provide: MyClass, useClass: MyMockClass }

这意味着当MyClass是应该注入实例的构造函数参数的类型时,会注入MyMockClass实例。

useValue是让Angular使用自定义实例创建逻辑

providers: [
  DebA, 
  DebB,
  { provide: MyClass, useValue: (a, b) => new MyClass(a, b), deps: [DepA, DebB] }
]

{ provide: 'myServerPort', useValue: 8080 }

如果'myServerPort'不可用,Angular将无法为useValue提供值。