Skip to content

Circular Dependencies (Classes) Example

circular-deps-classes/
├── interfaces/
│ ├── IClassA.ts
│ └── IClassB.ts
├── services/
│ ├── ClassA.ts
│ └── ClassB.ts
├── ioc.config.json
└── README.md
export interface IClassA {
methodA(): string;
}
export interface IClassB {
methodB(): string;
}
import { IClassB } from '../interfaces/IClassB';
export class ClassA implements IClassA {
constructor(private classB: IClassB) {}
methodA(): string {
return 'ClassA calling: ' + this.classB.methodB();
}
}
import { IClassA } from '../interfaces/IClassA';
export class ClassB implements IClassB {
constructor(private classA: IClassA) {}
methodB(): string {
return 'ClassB calling: ' + this.classA.methodA();
}
}
{
"source": ".",
"output": "container.gen.ts",
"interface": "I[A-Z].*",
"exclude": [
"**/*.test.ts",
"**/*.spec.ts"
],
"verbose": true,
"modules": {
"CircularModule": [
"services/*.ts",
"interfaces/*.ts"
]
}
}
Error: Circular dependency detected in the dependency graph.
Circular dependency chain:
ClassA -> IClassB (ClassB) -> IClassA (ClassA)
Classes involved in circular dependencies:
- ClassA (/path/to/services/ClassA.ts)
- ClassB (/path/to/services/ClassB.ts)