Angular 对模块中的独立服务实例使用Factory Provider

Angular 对模块中的独立服务实例使用Factory Provider,angular,service,Angular,Service,有关 我有以下代码 const MyType1Factory = () => { return new MyService<Type1>(); }; export let MyType1Provider = { provide: MyService, useFactory: MyType1Factory, }; 但我不知道如何在我的子组件中检索这个实例 另外,这是一个正确的实现吗 编辑: 我还尝试在模块中添加以下内容 export const MyType2 =

有关

我有以下代码

const MyType1Factory = () => {
  return new MyService<Type1>();
};

export let MyType1Provider =
{
  provide: MyService,
  useFactory: MyType1Factory,
};
但我不知道如何在我的子组件中检索这个实例

另外,这是一个正确的实现吗

编辑:

我还尝试在模块中添加以下内容

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 }
]
export const MyType2=新注入令牌('Type2');
export const MyType1=新注入令牌('Type1');
供应商:[
{提供:MyType2,使用工厂:MyType2Factory},
{提供:MyType1,使用工厂:MyType1Factory}
]
以及组件中的以下内容

  constructor(@Inject(MyType2) private MyType2: MyService<Type2>,
              @Inject(MyType1 ) private MyType1 : MyService<Type1>) { }
constructor(@Inject(MyType2)私有MyType2:MyService,
@注入(MyType1)私有MyType1:MyService{}
但是这个给我

compiler.js:2430未捕获错误:无法解析的所有参数 导航索引组件:(?,?)


这里是stackblitz

stackblitz项目中有两个问题

编写useFactory,而不是useClass,因为您正在使用factory方法而不是类进行实例化。 在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');
从'@angular/core'导入{NgModule,InjectionToken};
从“./synchronizator.service”导入{SynchronizatorService};
export const SYNCH_STRING=new InjectionToken('SynchMapToken');
export const SYNCH_NUMBER=新注入令牌('SynchWaypointToken');

stackblitz项目中有两个问题

编写useFactory,而不是useClass,因为您正在使用factory方法而不是类进行实例化。 在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');
从'@angular/core'导入{NgModule,InjectionToken};
从“./synchronizator.service”导入{SynchronizatorService};
export const SYNCH_STRING=new InjectionToken('SynchMapToken');
export const SYNCH_NUMBER=新注入令牌('SynchWaypointToken');
     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');