【问题标题】:Circular dependencies Angular (Just the file name)循环依赖 Angular(只是文件名)
【发布时间】:2019-10-03 12:35:45
【问题描述】:

以前,我有用于接口和服务的单独文件,但我将它们合并到同一个文件中,因为我总是一起请求它们。即 user.interface.ts + user.service.ts => user.service.ts - 声明用户界面和服务的地方。它使开发速度更快,无需打开/需要这么多文件。

我遇到的一个问题是,从文件中导入接口时会收到循环依赖警告(这会创建文件循环)。我假设这没有问题,这只是一个愚蠢的警告?如果是这样,有没有办法在不过滤掉循环服务的情况下过滤掉这些警告?

文件示例

服务A

import { ServiceB } from '../serviceB.service';

@Injectable()
export class ServiceA {}

服务 B

import { C1, C2 } from '../serviceC.service';

@Injectable()
export class ServiceB {}

服务中心

import { ServiceD } from '../serviceD.service';

export interface C1 {}

export interface C2 {}

@Injectable()
export class ServiceC {}

服务D

import { ServiceA } from '../serviceA.service';

@Injectable()
export class ServiceD {

【问题讨论】:

  • 分享文件。
  • 您的导入中确实存在循环依赖。 D 进口 A 进口 B 进口 C 进口 D 然后再次进口 A 等等。换句话说,您的 ServiceD 导入 ServiceA 正在创建循环依赖。
  • A -> B -> C -> D -> A 一个完美的圆圈!你应该重新考虑你的架构来打破这种循环依赖。如果A 是通过BC 隐式导入D。然后A 拥有一切。无需使D 依赖于A。这是一条完美的单向街道。不要回头。

标签: angular typescript circular-dependency


【解决方案1】:

如果我正确理解您的示例,ServiceB 仅依赖于serviceC.service 的接口C1C2

为什么不将C1C2 移到单独的文件中?

这样

C -> D -> A -> B -> interfaces

...你的圈子坏了。

【讨论】:

  • 我知道我可以将接口移动到不同的文件,它会打破循环,我不想这样做,以保持结构一致。该应用程序构建良好,如果有服务圈,我认为它不会。所以我真正想知道的是,这是否存在实际问题,或者它只是被 Angular 用来识别可能的圈子依赖关系的简单算法所捕获。
  • @d9nny 恕我直言,最好不要将接口与实现混合。然而,也许查看实际代码会让您的选择更容易理解。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多