使用依赖注入将参数传递给服务的构造函数?

时间:2017-07-27 17:04:19

标签: angular

我有自定义服务类:

@Injectable()

export class CustomService {
  constructor(num: number) {
  }
}

此类注入组件的构造函数中,如下所示:

constructor(private cs: CustomService) {
}

但是如何将参数num传递给上述构造函数中的服务? 这样的事情:

constructor(private cs: CustomService(1)) {
}

我知道作为解决方案我可以使用Fabric模式,但是只有一种方法可以做到吗?

2 个答案:

答案 0 :(得分:1)

如果CustomService实例不应该是注射器单例,那么它是:

providers: [{ provide: CustomService, useValue: CustomService }]

...

private cs;

constructor(@Inject(CustomService) private CustomService: typeof CustomService) {
  this.cs = new CustomService(1);
}

如果应该记住CustomService以返回单个参数的单例,则应通过其他缓存服务检索实例:

class CustomServiceStorage {
  private storage = new Map();

  constructor(@Inject(CustomService) private CustomService: typeof CustomService) {}
  get(num) {
    if (!this.storage.has(num))
      this.storage.set(num, new this.CustomService(num));

    return this.storage.get(num);
  }
}

答案 1 :(得分:0)

服务可以保存数据。您可以在服务中定义公共属性并设置该数据。

以下是一个例子:

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

@Injectable() 
export class DataService {
  serviceData: string; 
}

但如果您正在配置该服务,Jon对您的问题的评论可能是更好的解决方案。