dim*_*cas 4 dependency-injection typescript aurelia aurelia-dialog
我有一个类使用DialogService来自'aurelia-dialog` 的实例来打开我的Aurelia应用程序中的几乎每个对话框.以非常抽象的方式,类看起来像这样:
export class DialogTrigger{
triggerDialogA() {...}
triggerDialogB() {...}
triggerDialogC() {...}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,直到我尝试注入DialogTrigger其中一个对话框.
所以我想说我想创建一个新的对话框DialogD.我只需添加另一种方法triggerDialogD()在DialogTrigger打开一个新的对话框DialodD视图模型和一切正常.但是,如果我希望我的新对话框也可以通过使用DialogTrigger一切实例来触发其他对话框(A,B或C)之一.
如果我注入DialogTrigger到DialogD我总是得到一个错误:
键/值不能为null或未定义.您是否尝试注入/注册DI不存在的内容?
如果我删除依赖项,该对话框将起作用.
TL; DR
我有一个DialogTrigger打开aurelia-dialogs 的课程.当我注入DialogTrigger由它实例化的任何对话框时,DI失败.
有任何想法吗?
听起来像循环依赖问题.
您必须使用路径字符串来引用其中的对话框DialogTrigger.你不能导入Dialog到DialogTrigger,然后也输入DialogTrigger到Dialog.
这可行:
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' }); }
}
Run Code Online (Sandbox Code Playgroud)
这不会起作用:
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 }); }
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是将引用传递给DialogTrigger在open()函数的model: {}参数.像这样:
this._dialogService.open({ viewModel: './prompt', model: { dialogTrigger: this } });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |