angular - 角度依赖注入无法解决库组件
问题描述
这是一个简单的情况。在我的名为 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 提供服务时,谁能弄清楚为什么会出现该错误?
解决方案
你应该使用
providers: [ MyService ]
代替
provider: [{provide: MyService, useClass: MyExtendedService }]
推荐阅读
- c++ - 当包含 .h 文件时,是否包含在 .cpp 文件中
- ios - 线程1:异常:必须设置presentingviewcontroller。(迅速)
- javascript - 添加多个事件监听器的更聪明的方法?
- pandas - 如何通过旋转/转置/分组/任何方法更好地组织 DataFrame?(熊猫)
- c++ - 像 union_ 这样的 Boost.Geometry 操作如何处理浮点类型的基本不精确性?
- javascript - 如何将一个javascript文件中的值传递到另一个javascript文件
- php - JSEncrypt 可以签名和验证,但 PHP openssl_verify 失败
- r - 使函数在 R 中的赋值运算符的 LHS 上工作
- javascript - 与 if else 对应物相比,Javascript 三元组在 React 状态下产生意外结果
- html - 网页在移动设备上打开放大