Angular依赖注入机制的一个错误消息:Error Cannot instantiate cyclic dependency!

299 阅读1分钟

例子:

import { Injectable } from '@angular/core';

@Injectable({
    providedIn: 'root',
  })
export abstract class HttpErrorHandler{
    abstract handleError(
      ): void;
}

@Injectable({
    providedIn: 'root',
  })
export class UnKnownHandler {
    handleError(){
        console.log('UnknownHandler works');
    }
}

@Injectable({
    providedIn: 'root',
  })
export class BadGatewayHandler {
    handleError(){
        console.log('BadGatewayHandlers works');
    }
}

app.module.ts里的providers声明:

运行时报错:

main.ts:12 Error: Cannot instantiate cyclic dependency! HttpErrorHandler
at throwCyclicDependencyError (core.js:8104)
at R3Injector.hydrate (core.js:17203)
at R3Injector.get (core.js:16957)
at injectInjectorOnly (core.js:941)
at ɵɵinject (core.js:951)
at Object.factory (core.js:17383)
at R3Injector.hydrate (core.js:17207)
at R3Injector.get (core.js:16957)
at injectInjectorOnly (core.js:941)
at ɵɵinject (core.js:951)

hydrate(token, record) {
        if (record.value === CIRCULAR) {
            throwCyclicDependencyError(stringify(token));
        }
        else if (record.value === NOT_YET) {
            record.value = CIRCULAR;
            record.value = (/** @type {?} */ (record.factory))();
        }
        if (typeof record.value === 'object' && record.value && hasOnDestroy(record.value)) {
            this.onDestroy.add(record.value);
        }
        return (/** @type {?} */ (record.value));
    }

此处进行的报错:

更多Jerry的原创文章,尽在:“汪子熙”: