Angular DI maintains a single instance per provider. In your case if you have two constructor parameters with the same type, they resolve to the same instance.
What you can do is to provide a factory function (different from a simple useFactory
provider event though it uses it as well)
(Example copied from https://stackoverflow.com/a/37517575/217408)
{ provide: EditorService, useFactory:
(dep1, dep2) => {
return (x) => {
new EditorService(x, dep1, dep2);
}
}, deps: [Dep1, Dep2]
})
....
constructor(@Inject(EditorService) editorServiceFactory: any) {
let editorService1 = editorServiceFactory(1);
let editorService2 = editorServiceFactory(2);
}
If you have a fixed number of instances this should work:
{ provide: 'instance1', useClass: EditorService },
{ provide: 'instance2', useClass: EditorService },
export class SomeComponent {
constructor(
@Inject('instance1') private _appleEditorService: EditorService,
@Inject('instance2') private _pearEditorService: EditorService) {}
}