【发布时间】:2019-05-29 21:10:23
【问题描述】:
@Injectable({
providedIn: 'root',
/* useFactory: () => new MyService(MyAnotherService.myInteger) */
})
export class MyService{
constructor(private someInteger?: number) {
// doThings with someInteger
}
--aot build 会抱怨Warning: Can't resolve all parameters for...
事实上,由于useFactory: () 部分,我们仍然能够正确运行我们的应用程序。但我不知道这是否正确
我们当然可以把构造函数改成
constructor(private anotherService?: MyAnotherService) {
// doThings with anotherService
}
要关闭构建警告,
但是我不认为MyService应该依赖于MyAnotherService,因为它可以只依赖于一个原语,这对代码的可重用性也很不利
在这种情况下最好的做法是什么?
我的想法是这样的。 Angular 使用 Decorator 来指示它是一个 Angular 组件(对吗?) 所以主逻辑体不应该总是耦合到 Angular DI 逻辑,特别是如果它是一个服务。我们可以拉取服务代码并将其插入其他地方(是否使用 DI)
【问题讨论】:
-
你为什么要传递 'private someInteger?: number'
-
这是我希望在构建阶段可用的配置之一,仅此而已。在 Typescript 中拥有那种构造函数是不正常的吗?
-
构造函数一般只用于依赖注入
-
您是否需要将此服务声明为 tree-shakable 提供者?
-
如何创建该服务的实例?你总是让角度DI来做吗?那么如何提供整数参数呢?
标签: angular typescript