角.注入器不像想象的那样工作

angular.injector not behaving as imagined

本文关键字:工作 注入器      更新时间:2023-09-26

我正在尝试使用angular。注入器作为服务定位器来检索基类中的服务,许多控制器都是从基类中派生出来的。我这样做是因为我不想为了获得服务的一个实例而修改几十个控制器的构造函数签名。我非常乐意牺牲这样的流氓服务,以避免在我的控制器上进行大量有风险的工作。

我的基本控制器是这样的:

module Controllers {
    "use strict";
    export class MyBaseController {
        static $inject = ["$q"];
        protected qService: angular.IQService;
        private myService: Services.MyService;
        constructor($q: angular.IQService) {
            this.qService = $q;
            // falls over on this next line
            this.myService = angular.injector(["myApp"]).get("MyService");
        }
        protected myBehaviour(details: any) {
            this.myService.myServiceMethod(details);
        }
    }
} 

我的服务是这样的:

module Services {
    "use strict";
    export class MyService {
        static $inject = ["$modal"];
        private modal;
        private modalInstance;
        constructor($modal) {
            this.modal = $modal;
        }
        public myServiceMethod() {
            // do something with $modal
        }
    }
}

在我的控制器的行错误看起来像这样:

Error: [$injector:unpr] Unknown provider: $rootElementProvider <- $rootElement <- $animate <- $compile <- $modalStack <- $modal <- ApplicationErrorService

我是否误解了注射器的功能?是否存在由于服务本身具有无法解决的依赖关系而无法创建服务实例的问题?

非常感谢您对这个问题的帮助。

是我无法创建服务实例的问题,因为服务本身具有无法解决的依赖关系

是的。特别是$rootElement是不可用的。这是在 angular被引导之前执行的信号:https://docs.angularjs.org/api/ng/function/angular.bootstrap