Circular Dependencies (Classes) Example
Project Structure
Section titled “Project Structure”circular-deps-classes/├── interfaces/│ ├── IClassA.ts│ └── IClassB.ts├── services/│ ├── ClassA.ts│ └── ClassB.ts├── ioc.config.json└── README.md
Interface Definitions
Section titled “Interface Definitions”export interface IClassA { methodA(): string;}
export interface IClassB { methodB(): string;}
ClassA depends on ClassB
Section titled “ClassA depends on ClassB”import { IClassB } from '../interfaces/IClassB';
export class ClassA implements IClassA { constructor(private classB: IClassB) {}
methodA(): string { return 'ClassA calling: ' + this.classB.methodB(); }}
ClassB depends on ClassA
Section titled “ClassB depends on ClassA”import { IClassA } from '../interfaces/IClassA';
export class ClassB implements IClassB { constructor(private classA: IClassA) {}
methodB(): string { return 'ClassB calling: ' + this.classA.methodA(); }}
Configuration
Section titled “Configuration”{ "source": ".", "output": "container.gen.ts", "interface": "I[A-Z].*", "exclude": [ "**/*.test.ts", "**/*.spec.ts" ], "verbose": true, "modules": { "CircularModule": [ "services/*.ts", "interfaces/*.ts" ] }}
Expected Error
Section titled “Expected Error”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)