【描述】TypeError: Reflect.hasOwnMetadata is not a function。我也认为这是微信开发工具的bug,inversify 和reflect-metadata包在standalone(非小程序环境)的ts项目里可以无错执行。但是在微信开发工具中报错,会报同样错的DI包还有https://www.npmjs.com/package/@abraham/reflection。
【造成的影响】经典的DI框架不能用在小程序中,影响OO开发体验,很难受,还请告知如何解决
【示例代码】
Inversify示例github代码地址:https://github.com/lubancafe/inversify-class-example
主要问题代码段如下(可插入小程序的app.ts中复现题主的错误):
import “reflect-metadata”;
import { Container, injectable } from “inversify”;
@injectable()
class Katana {
public hit() {
return “cut!”;
}
}
@injectable()
class Shuriken {
public throw() {
return “hit!”;
}
}
@injectable()
class Ninja implements Ninja {
private _katana: Katana;
private _shuriken: Shuriken;
public constructor(katana: Katana, shuriken: Shuriken) {
this._katana = katana;
this._shuriken = shuriken;
}
public fight() { return this._katana.hit(); };
public sneak() { return this._shuriken.throw(); };
}
var container = new Container();
container.bind<Ninja>(Ninja).to(Ninja);
container.bind<Katana>(Katana).to(Katana);
container.bind<Shuriken>(Shuriken).to(Shuriken);
const ninja = container.get<Ninja>(Ninja);
console.log(ninja.fight());
console.log(ninja.sneak());