首页 > 解决方案 > 角度依赖注入无法解决库组件

问题描述

这是一个简单的情况。在我的名为 lib-a 的库项目中,定义了 3 个类:libAModule、LibAComponent 和 MyService。LibAComponent 有一个以 MyService 作为参数的构造函数。MyService 装饰有

@Injector() 

属性。

在根应用程序的 appModule 中,我提供了该服务:

providers: [MyService]

appModule 还有一个以 MyService 作为参数的构造函数。

当我运行应用程序时,依赖关系在 appModule 的构造函数中解析(通过在调试器中单步执行来验证),但是,当我尝试渲染 LibAComponent 时,我在浏览器控制台窗口中收到以下错误:

Error: StaticInjectorError(AppModule)[libAComponent-> MyService]: 
  StaticInjectorError(Platform: core)[libAComponent-> MyService]: 
    NullInjectorError: No provider for MyService!

我可以通过更新

@Injector({provideIn: 'root'}) 

MyService 上的属性。但是,理论上它相当于像我一样在appModule中提供服务。我想这样做的原因是因为最终我想在 appModule 中提供这样的服务:

providers: [{provide: MyService, useClass: MyExtendedService }] 

其中 myExtendedService 在库项目之外定义。

当我通过 appModule 提供服务时,谁能弄清楚为什么会出现该错误?

标签: angulardependency-injectionlibrary-project

解决方案


你应该使用

 providers: [ MyService ]

代替

provider: [{provide: MyService, useClass: MyExtendedService }] 

推荐阅读