设置可注射类的默认值

时间:2018-02-01 20:48:27

标签: angular dependency-injection

这是我想要做的:

@Injectable()
export class MyInjectableClass {
   constructor(timeout: number = 50) {
   }
}

我想要实现的是timeout在注入时被设置为0,但是当它被手动构造时,调用代码可以设置它想要的任何值。

这不起作用,因为注射器无法注入数字"并且没有意识到它可以使用默认值。这也不起作用:

@Injectable()
class MyInjectableClass {
   constructor(@Optional() timeout: number = 50) {
   }
}

因为原因,这不起作用。

工作是什么

export class MyInjectableClassOptions {
   timeout: number,
}

@Injectable()
export class MyInjectableClass {
   constructor(@Optional() options?: MyInjectableClassOptions) {
      const timeout = options? options.timeout : 50;
   }
}

但男人,那是丑陋而精致的。告诉我还有另一种可能性。

1 个答案:

答案 0 :(得分:1)

您可以使用InjectionToken注入简单值。

这样的东西
export const MY_OPTION = new InjectionToken<number>('my-option');

然后在你的模块中

providers: {provide: MY_OPTION, useValue: 50}

最后在你的服务中

constructor(@Inject(MY_OPTION) option: number) {}

对于默认选项,您可以将@Optional属性与@Inject

结合使用