我有一个数据访问库,我在其中处理数据访问,还为要在我的应用程序的其他库中使用的服务定义了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移到共享库中,我也不希望这么做。
有人遇到过类似情况吗?