Closed renaiss closed 3 years ago
如何在DbTimer里面读取使用provide注册的Db
import { CronJob, Daruk, DarukServer, provide, inject, timer, TimerClass } from "daruk"; const main = async function () { try { const app = DarukServer(); @provide("Db") class Db { } @timer() class DbTimer implements TimerClass { @inject("Db") private Db!: Db; public cronTime!: string; public initTimer(daruk: Daruk) { this.cronTime = '* * * * * *'; } public onTick(cron: CronJob, daruk: Daruk) { console.log(this.Db); } } app.binding(); app.listen(8899); } catch (error) { console.log(error); } }; main(); // Error: No matching bindings found for serviceIdentifier: Db
你的写的没什么问题,timer 是一个 plugin,他在执行时,业务方定义的比如 provide 注入的依赖,还没有被 load,所以会报这个错。
我已经修复了,把 daruk 的 init 置后了,然后就好了,可以更新到 daruk@2.3.5 版本。
https://github.com/darukjs/daruk/commit/802e2d137c49bee1ca9aa3f5bca96ad397e99368
如何在DbTimer里面读取使用provide注册的Db