【问题标题】:Missing @inject annotation, which isn't missing in inversify with an extending class缺少 @inject 注释,这在使用扩展类的 inversify 中没有丢失
【发布时间】:2017-11-02 06:18:16
【问题描述】:

我遇到了一个似乎有点难以放入标题的问题,这就是为什么你得到这个标题的原因。

我收到一条错误消息:Error: Missing required @inject or @multiInject annotation in: argument 0 in class SceneRepository.
这看起来很简单,我应该在我的第一个参数中添加一个@inject 注释。这是我的构造函数:

export class SceneRepository extends BaseRepository<IScene> {
  constructor(@inject(SceneSchema) private sceneSchema: SceneSchema) {
    super(sceneSchema.schema);
  }
}

为了完整起见,这就是我的 BaseRepository 的样子:

export class BaseRepository<T extends Document> implements IWrite<T>, IRead<T>{
  constructor(private _model: Model<Document>) {

  }
  ...
}

Model&lt;Document&gt; 来自第三方库(猫鼬)。

我不知道我在这里做错了什么,所以如果你能把我推向正确的方向,我们将不胜感激。

【问题讨论】:

  • 您找到解决方案了吗?
  • 嗨@andrew,不,我没有,并且是的,我有。我做了一些重写并围绕错误写了。你会原谅我不记得细节吗?但是IIRC我只是为_model创建了一个getter和一个setter,不再使用super()设置它。因为我认为这与构造函数需要完全不同的参数有关。所以我并没有真正解决这个问题,我删除了它:D

标签: node.js typescript mongoose inversifyjs


【解决方案1】:

我遇到了类似的问题,在我的例子中,我使用属性注入来解决这个错误,而不是构造函数注入,并且还让注入工作。

export class SceneRepository extends BaseRepository<IScene> {
    @inject(SceneSchema)
    private sceneSchema: SceneSchema;
    constructor() {
        super(this.sceneSchema.schema);
      }
    }

希望这会有所帮助。

【讨论】:

  • 'TypescriptInterface' only refers to a type, but is being used as a value here 如果我添加@inject(TypescriptInterface),则会出现此错误
猜你喜欢
  • 2019-05-06
  • 1970-01-01
  • 2019-09-07
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2019-04-18
  • 1970-01-01
  • 2022-01-22
相关资源
最近更新 更多