Is it possible to inject a service inside another service and vice versa at the same time?

前端 未结 3 1899
日久生厌
日久生厌 2021-01-18 06:28

I have a real scenario in a real project where I need 2 services to access the properties and/or methods of each other. I\'m not an Angular expert so is it possible?

3条回答
  •  说谎
    说谎 (楼主)
    2021-01-18 07:07

    I agree with the solution proposed by basarat. Another workaround would be to initialize the instances outside DI and provide them as value like

    One service needs to be modified to be able to create an instance without providing the other service as dependency:

    @Injectable()
    export class FirstService {
    
      foo: string = 'abc';
      secondService: SecondService
    
      constructor() {
        //this.foo = this.foo + this.secondService.bar;
      }
    
      init(secondService:SecondService) {
        this.foo = this.foo + secondService.bar;
      }
    }
    

    Then create the instances imperatively and provide them as value

    let firstService = new FirstService();
    let secondService = new SecondService(firstService);
    
    @Component({
      selector: 'my-app',
      template: '

    Hello world!

    ', providers: [ provide(FirstService, {useFactory: () => { firstService.init(secondService); return firstService; }}), provide(SecondService, {useValue: secondService})] }) ...

    Plunker example

提交回复
热议问题