Circular Dependencies (Modules) Example
Project Structure
Section titled “Project Structure”circular-deps-modules/├── interfaces/│ ├── IServiceA.ts│ └── IServiceB.ts├── services/│ ├── ServiceA.ts│ └── ServiceB.ts├── ioc.config.json└── README.md
Module Configuration
Section titled “Module Configuration”{ "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" ] }}
Interface Definitions
Section titled “Interface Definitions”export interface IServiceA { doSomething(): string;}
export interface IServiceB { doSomething(): string;}
ServiceA depends on ServiceB
Section titled “ServiceA depends on ServiceB”import { IServiceB } from '../interfaces/IServiceB';
export class ServiceA implements IServiceA { constructor(private serviceB: IServiceB) {}
doSomething(): string { return 'A: ' + this.serviceB.doSomething(); }}
ServiceB depends on ServiceA
Section titled “ServiceB depends on ServiceA”import { IServiceA } from '../interfaces/IServiceA';
export class ServiceB implements IServiceB { constructor(private serviceA: IServiceA) {}
doSomething(): string { return 'B: ' + this.serviceA.doSomething(); }}
Expected Error
Section titled “Expected Error”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