与this
有关我有以下代码
const MyType1Factory = () => {
return new MyService<Type1>();
};
export let MyType1Provider =
{
provide: MyService,
useFactory: MyType1Factory,
};
和
const MyType2Factory = () => {
return new MyService<Type2>();
};
export let MyType2Provider =
{
provide: MyService,
useFactory: MyType2Factory,
};
现在,我尝试将此服务的两个不同实例注入到我的模块中,以便可以从该模块的任何组件访问我的两个实例
@NgModule({
...
providers: [MyType1Provider , MyType2Provider ]
})
但是我不完全知道如何在子组件中检索此实例。
此外,这是正确的实现吗?
编辑:
我还尝试在模块中添加以下内容
export const MyType2 = new InjectionToken<MyService<Type2>>('Type2');
export const MyType1 = new InjectionToken<MyService<Type1>>('Type1');
providers: [
{ provide: MyType2, useFactory : MyType2Factory },
{ provide: MyType1 , useFactory: MyType1Factory }
]
以及组件中的以下内容。
constructor(@Inject(MyType2) private MyType2: MyService<Type2>,
@Inject(MyType1 ) private MyType1 : MyService<Type1>) { }
但这给了我
compiler.js:2430未捕获的错误:无法解析所有参数 NavigationIndexComponent:(?,?)。
答案 0 :(得分:0)
stackblitz项目中有2个问题
写useFactory而不是useClass,因为您使用的是工厂方法而不是类进行实例化。 将令牌实例化写入不在app.module.ts中的其他文件中,这会导致循环依赖,因为app.module.ts导入my-component.component.ts文件,而my-component.component.ts导入app.module.ts,例如token.ts文件,然后从那里导入app.module和my-component.component
import { NgModule, InjectionToken } from '@angular/core';
import { SynchronizatorService } from './synchronizator.service';
export const SYNCH_STRING = new InjectionToken<SynchronizatorService<string, string>>('SynchMapToken');
export const SYNCH_NUMBER = new InjectionToken<SynchronizatorService<number, number>>('SynchWaypointToken');