无法使用DI注入课程

Dilucas

我有一个使用DialogService'aurelia-dialog'实例的类来打开我的Aurelia应用程序中的几乎每个对话框。以非常抽象的方式,该类如下所示:

export class DialogTrigger{
    triggerDialogA() {...}
    triggerDialogB() {...}
    triggerDialogC() {...}
}

一切正常,直到我尝试注入DialogTrigger其中一个对话框。

因此,假设我要创建一个新对话框DialogD。我只是简单地添加了另一种方法triggerDialogD()DialogTrigger即使用DialodD视图模型打开一个新对话框,一切正常。但是,如果我希望我的新对话框也通过使用DialogTrigger一切崩溃的实例来触发其他对话框之一(A,B或C)

如果我注入DialogTriggerDialogD我总是得到一个错误:

键/值不能为null或未定义。您是否要注入/注册DI不存在的内容?

如果删除依赖项,对话框将起作用。

TL; DR我有一个DialogTrigger打开aurelia-dialogs当我注入DialogTrigger由它实例化的任何对话框时,DI都会失败

有任何想法吗?

油布

听起来像是循环依赖问题。

您将必须使用路径字符串来引用其中的对话框DialogTrigger你不能导入DialogDialogTrigger,然后也输入DialogTriggerDialog


这将工作:

import { DialogService } from 'aurelia-dialog';

export class DialogTrigger {
  static inject = [DialogService];

  constructor(dialogService) {
    this._dialogService = dialogService;
  }

  openDialogA() { this._dialogService.open({ viewModel: './prompt' }); }
  openDialogB() { this._dialogService.open({ viewModel: './prompt' }); }
}

不起作用:

import { DialogService } from 'aurelia-dialog';
import { Prompt } from './prompt';

export class DialogTrigger {
  static inject = [DialogService];

  constructor(dialogService) {
    this._dialogService = dialogService;
  }

  openDialogA() { this._dialogService.open({ viewModel: Prompt }); }
  openDialogB() { this._dialogService.open({ viewModel: Prompt }); }
}

另一种选择是将引用传递给DialogTriggeropen()函数的model: {}参数。像这样:

this._dialogService.open({ viewModel: './prompt', model: { dialogTrigger: this }  });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章