模拟服务时库之间的循环依赖关系

时间:2019-12-20 14:19:55

标签: angular typescript

我有一个数据访问库,我在其中处理数据访问,还为要在我的应用程序的其他库中使用的服务定义了InjectionTokens。我在模拟库中模拟了服务,以开发我还没有API规范的应用程序部分。数据访问模块如下所示:

服务:

@Injectable({
  providedIn: 'root'
})
export class DataService implements RestServiceInterface{
  constructor() {}
  findById(id: number): Observable<Entity[]> {}
}

接口:

export interface RestServiceInterface{
  findById(id: number): Observable<Entity[]>;
}

我用来将服务注入组件的数据访问模块和InjectionToken:

export const RestServiceProvider = new InjectionToken(
  'RestServiceProvider',
{
  providedIn: 'root',
  factory: () => new DataService()
});
@NgModule({
  imports: [CommonModule],
  providers: []
})
export class DataAccessModule {}

该服务将被注入到组件中,如下所示:

constructor(
    @Inject(RestServiceProvider ) public restService: RestServiceInterface
  ) 

到目前为止,一切都很好。 然后,我创建了一个模拟库来模拟我还没有API规范的服务。

   @Injectable({
      providedIn: 'root'
    })
    export class MockDataService implements RestServiceInterface{
      constructor() {}
    }

通过在模拟库中使用RestServiceInterface,我有种印象,我可以将InjectionToken更改为:

    export const RestServiceProvider = new InjectionToken(
      'RestServiceProvider',
    {
      providedIn: 'root',
      factory: () => new MockDataService()
    });

并将模拟服务用于进一步的开发。但是我现在在模拟库和数据访问库之间有了循环依赖关系,因为模拟库使用了数据访问库中的接口和实体,而数据访问库则导入了模拟服务。

我该如何解决?

我可以在模拟库中为服务创建InjectionTokens,但随后必须在使用它们的地方更改组件的构造函数。

另一种选择是将InjectionTokens移到共享库中,我也不希望这么做。

有人遇到过类似情况吗?

0 个答案:

没有答案