给出如下定义的多注入列表,没有任何提供程序,我希望注入列表为空,但实际上它是空的。
是否有一种方法注入值作为[]
而不是null
,如果没有这个可注入的提供者?我不能重写构造函数中的值,因为构造函数中的代码在字段初始化器之后运行,所以错误发生在我可以纠正值之前。
const MY_INTERCEPTORS: InjectionToken<MyInterceptor> = new InjectionToken('MyInterceptors');
@Injectable()
export class MyService {
constructor(
@Optional() @Inject(MY_INTERCEPTORS) private readonly interceptors: MyInterceptor[]
) {
super();
}
public myField$(input: Foo) = this.interceptors.reduce((agg, e) => e.intercept(agg), input); // Expect this.interceptors to be [], but is null
}
你可以为你的InjectionToken提供一个工厂。它将被用作默认值
const MY_INTERCEPTORS: InjectionToken<Array<MyInterceptor>> = new InjectionToken('MyInterceptors', {
factory: () => [],
});
顺便说一下,InjectionToken的类型应该是array
const MY_INTERCEPTORS: InjectionToken<Array<MyInterceptor>>