【问题标题】:Multiple Dependency Inection Tsyringe多重依赖注射Tsyringe
【发布时间】:2021-01-08 20:16:21
【问题描述】:

我正在尝试使用 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.resolve('DashboardService') 工作吗?
  • 可以用而且我不用注册服务,参数DashboardService必须是类名而不是字符串

标签: typescript dependency-injection


【解决方案1】:

实现接口的服务已正确注册,但一个小的改进是在注册时省略模板类型,因为它没有添加任何内容:

container.registerSingleton('DashboardDAO', DashboardDAO);
container.registerSingleton('DashboardService', DashboardService);

我建议使用符号而不是硬编码字符串,但这是次要的。

问题是您将DashboardController 类标记为可注入但没有告诉tsyringe 如何解决该类。一种方法是将其标记为单例:

@singleton()
class DashboardController {...}

或:

container.registerSingleton(DashboardController)

然后使用container.resolve(DashboardController) 解析应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 2021-08-07
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多