typescript - 多重依赖注射Tsyringe
问题描述
我正在尝试使用 tsyringe 实现级联。
我有一个必须注入到必须注入控制器类的服务类中的单例数据库类:
@injectable()
class DashboardDAO implements IDashboardDAO {...}
@injectable()
class DashboardService implements IDashboardService {
construtor(@inject('DashboardDAO') private dashboardDao: IDashboardDAO){}
}
@injectable()
class DashboardController {
construtor(@inject('DashboardService') private dashboardService: IDashboardService){}
}
在我的容器中,我有以下配置。
/** REPOSITORIES */
container.registerSingleton<IDashboardDAO>('DashboardDAO', DashboardDAO);
/** SERVICES */
container.registerSingleton<IDashboardService>('DashboardService', DashboardService);
我想用注入的所有东西来实例化控制器,如下所示:
const controller = container.resolve(DashboardController);
它无法解决...我收到以下错误:
尝试解析未注册的依赖令牌
如果我执行下面的代码可以正常工作,但我想通过所有注入来解析控制器。
container.resolve(DashboardService);
有谁知道为什么?
谢!
解决方案
实现接口的服务已正确注册,尽管一个小的改进是在注册时省略模板类型,因为它没有添加任何内容:
container.registerSingleton('DashboardDAO', DashboardDAO);
container.registerSingleton('DashboardService', DashboardService);
我建议使用符号而不是硬编码字符串,但这是一个小问题。
问题是您将该DashboardController
类标记为可注入但没有告诉tsyringe
如何解决该类。一种方法是将其标记为单例:
@singleton()
class DashboardController {...}
或者:
container.registerSingleton(DashboardController)
然后解决container.resolve(DashboardController)
应该可以正常工作。
推荐阅读
- javascript - 为什么我不断收到错误 idpiframe_initialization_failed 与谷歌日历 API?
- c++ - 在换行符出现之前,如何将多个整数作为输入?
- node.js - React Native init 没有生成任何文件
- composer-php - chmod():不允许操作
- unit-testing - 如何测试以确保调用函数?
- decompiling - ildasm / ilasm - 赛门铁克误报
- python - 持续时间参数不适用于 Folium 插件 timestampedGeoJson
- php - 如何从 get_post_field() 激活阅读更多内容?
- python - 您可以在不复制内存的情况下迭代 DataFrame 吗?
- node.js - 在 Discord 的子文件中需要机器人时遇到问题