在Angular(4+)中,我想知道如何提供一个包含该类所有依赖关系的可注入类。
示例:
DepMaster是一个注射器,它又注入了依赖关系,即:
DepServantA
DepServantB
如果我提供DepMaster
,我还必须提供所有依赖项和子依赖项。以下不起作用:
@Component({
// ...
providers: [
DepMaster
]
})
为了使它工作,我必须写
@Component({
// ...
providers: [
DepMaster
DepServant1,
DepServant2,
]
})
提供DepMaster
时,我不想打扰DepMaster
的哪些依赖关系。我只想提供DepMaster
及其所有依赖项。
必须列出所有依赖项和子依赖项是不可能的。每当子依赖项发生变化时,我都必须更新用法。 这种方式的使用取决于实现细节。
答案 0 :(得分:1)
对于这种要求,您可以为这些依赖项创建单独的模块,并为此类DepMaster
创建
@NgModule({
declarations: [ ],
imports: [],
providers: [
DepMaster,
DepServant1,
DepServant2,]
})
export class DevMasterModule { }
然后在您希望提供这些服务的模块中导入此模块。例如
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule, ReactiveFormsModule, DevMasterModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
答案 1 :(得分:0)
我的解决方案是在我的主类中有一个依赖项列表。然后我可以将这个列表与大师班一起提供。
@Injectable()
export class MyMaster {
// list of dependencies which have to be provided for this class
static readonly PROVIDES: any = [
AuGridBuilder,
AuTableManager,
AuTabBuilder,
ApMenuBuilder
].concat(
AuGridBuilder.PROVIDES,
AuTableManager.PROVIDES,
AuTabBuilder.PROVIDES,
ApMenuBuilder.PROVIDES
);
constructor( private gridBuilder: AuGridBuilder,
private tableManager: AuTableManager,
private tabBuilder: AuTabBuilder,
private menuBuilder: ApMenuBuilder )
{
// ...
}
这是在每个注射类中完成的。 然后在模块中,我可以轻松地提供主服务器及其所有必需的依赖项:
providers: [ MyMaster, MyMaster.PROVIDES ]