@Injectable({
providedIn: 'root',
/* useFactory: () => new MyService(MyAnotherService.myInteger) */
})
export class MyService{
constructor(private someInteger?: number) {
// doThings with someInteger
}
-自动构建将抱怨Warning: Can't resolve all parameters for...
实际上,由于有了useFactory: ()
部分,我们仍然能够正确运行我们的应用程序。但是我不知道这是不是正确的方法
我们当然可以将构造函数更改为
constructor(private anotherService?: MyAnotherService) {
// doThings with anotherService
}
要关闭构建警告,
但是,我认为MyService
只能依赖于原语时,不应该依赖MyAnotherService
,这对于代码可重用性也是不利的
在这种情况下最好的办法是什么?
我的想法是。 Angular使用Decorator指示它是Angular组件(对吗?) 因此,主体逻辑主体不应该总是与Angular DI逻辑耦合,特别是如果它是一种服务。我们可以提取服务代码并将其插入其他地方(是否使用DI)
答案 0 :(得分:2)
通常的做法是尽可能少地添加逻辑。 大多数时候,构造函数用于注入依赖项。
constructor(private anotherService: AnotherService) {
// **don't** do Things with anotherService
}
然后将其用于其他功能
ngOnInit() {
this.anotherService.getValue().subscribe((value) => {
// do something
});
}
在创建组件的DOM,注入所有依赖项并绑定所有输入时,将调用ngOnInit()函数。即使逻辑不依赖DOM,输入绑定或Dependencie注入,也通常使用ngOnInit()。
答案 1 :(得分:1)
考虑这些:
Remove-AzADApplication
中有效但在AOT中无效的问题时,请打开$connection = Get-AzAutomationConnection -ResourceGroupName <ResourceGroupName> -AutomationAccountName <AutomationAccountName> -Name AzureRunAsConnection
$appid = $connection.FieldDefinitionValues.ApplicationId
Remove-AzADApplication -ApplicationId $appid
Remove-AzAutomationAccount -ResourceGroupName <ResourceGroupName> -Name <AutomationAccountName>
以获取有关问题的详细信息。ng serve
用于optional dependencies。答案 2 :(得分:1)
您可以使用可选的注入令牌
token.ts
import {InjectionToken} from '@angular/core';
export const INTEGER_TOKEN= new InjectionToken<number>('IntegerToken');
app.module.ts
import {INTEGER_TOKEN} from './token';
@NgModule({
//...
],
providers: [
{
provide: INTEGER_TOKEN,
useValue: 1 //Or factory if you need one
},
service.ts
import {INTEGER_TOKEN} from './token';
import {Injectable, Inject, Optional} from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class MyService{
constructor(@Optional() @Inject(INTEGER_TOKEN) private someInteger?: number) {
// doThings with someInteger
}
答案 3 :(得分:0)
只需删除'?'
import {MyAnotherService} from '/pathto your service';
constructor(private anotherService: MyAnotherService) {
//prodedures
}
或用于参数:
myVariable: any;
constructor(private anotherService: MyAnotherService) {
this.myVariable = [];
}
答案 4 :(得分:0)
构造函数通常应仅用于依赖注入
<my-component [state]="'joining'"></my-component>
export class MyService{
state: string;
constructor() {
console.log(this.state) // => undefined
}
ngOnInit() {
console.log(this.state) // => 'joining'
}
}