fluxject
Version:
A strongly-typed dependency injection library.
56 lines (55 loc) • 1.26 kB
TypeScript
/**
* Thrown when a circular dependency is detected.
*
* This typically occurs when two services depend on each other inside their constructors.
*
* You can resolve this by deferring any de-reference of your dependencies until after the constructor has completed.
*
* @example
* ```ts
* // This would cause a circular dependency
* class DependencyA {
* test = 1;
* constructor({ dependencyB }) {
* dependencyB.test;
* }
* }
*
* class DependencyB {
* test = 2;
* constructor({ dependencyA }) {
* dependencyA.test;
* }
* }
*
* // but this would be ok
* class DependencyC {
* test = 1;
* #dependencyD;
* constructor({ dependencyD }) {
* this.#dependencyD = dependencyD;
* }
* }
*
* // You can still de-reference from one of the dependencies, though:
* class DependencyD {
* test = 2;
* constructor({ dependencyC }) {
* dependencyC.test;
* }
* }
* ```
*/
export class CircularDependencyError extends RangeError {
/**
* @param {string} serviceName
* @param {any} stackTrace
*/
constructor(serviceName: string, stackTrace: any);
}
export class FluxjectError extends Error {
/**
* @param {string} message
*/
constructor(message: string);
}