Skip to content

Circular Dependencies (Modules) Example

circular-deps-modules/
├── interfaces/
│ ├── IServiceA.ts
│ └── IServiceB.ts
├── services/
│ ├── ServiceA.ts
│ └── ServiceB.ts
├── ioc.config.json
└── README.md
{
"source": ".",
"output": "container.gen.ts",
"interface": "I[A-Z].*",
"exclude": [
"**/*.test.ts",
"**/*.spec.ts"
],
"verbose": true,
"modules": {
"ModuleA": [
"services/ServiceA.ts",
"interfaces/IServiceA.ts"
],
"ModuleB": [
"services/ServiceB.ts",
"interfaces/IServiceB.ts"
]
}
}
export interface IServiceA {
doSomething(): string;
}
export interface IServiceB {
doSomething(): string;
}
import { IServiceB } from '../interfaces/IServiceB';
export class ServiceA implements IServiceA {
constructor(private serviceB: IServiceB) {}
doSomething(): string {
return 'A: ' + this.serviceB.doSomething();
}
}
import { IServiceA } from '../interfaces/IServiceA';
export class ServiceB implements IServiceB {
constructor(private serviceA: IServiceA) {}
doSomething(): string {
return 'B: ' + this.serviceA.doSomething();
}
}
Error: Circular dependency detected between modules.
Module dependency chain:
ModuleA -> ModuleB -> ModuleA
Detailed circular dependency:
ServiceA (ModuleA) -> IServiceB (ServiceB in ModuleB) -> IServiceA (ServiceA in ModuleA)
Modules involved in circular dependencies:
- ModuleA: services/ServiceA.ts, interfaces/IServiceA.ts
- ModuleB: services/ServiceB.ts, interfaces/IServiceB.ts