使用方法而不是构造函数注入服务

时间:2018-02-01 19:53:00

标签: angular angular5

说我有这个服务和组件。我想使用MySillyService的多个实例。

@Injectable()
export class MySillyService {

}

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})


export class AppComponent {

  vals: Array<MySillyService>;

  constructor() {

    this.vals = [1,2,3].map(v => {
       return this.getSillyService();
    });

  }

  @Inject(MySillyService)
  getSillyService(mss: MySillyService){
    console.log('getting mss...');
    return mss;
  }

}

这不会编译因为我收到此错误:

enter image description here

有没有办法使用方法而不是构造函数注入新的服务实例?

3 个答案:

答案 0 :(得分:2)

如果您不需要Angular对实例(单实例)或其依赖注入的管理,您可以创建一个简单的类。然后,您可以创建并传递您需要的多个实例。

我不认为这是一种常见的技术......但它应该有用。

答案 1 :(得分:2)

Injector服务可用于使用方法注入服务:

import { Injector } from '@angular/core';

export class AppComponent {

    vals: Array<MySillyService>;
    mySillyService: MySillyService;

    constructor(private injector: Injector) {
       this.vals = ['some','dynamic','array'].map(v => this.getSillyService());
    }

    getSillyService() {
       return this.injector.get(MySillyService);
    }

    injectAnotherInstance() {
       this.mySillyService = this.injector.get(MySillyService);
    }
}

答案 2 :(得分:1)

不,没有。但是你可以通过命名不同的东西来注入多个实例:

构造函数(private myService1:dataService,private myService2:dataService){}