5

有没有办法在没有构造函数注入的情况下访问 Aurelia 的依赖注入系统。

我有一堂课叫Box. 我需要知道它的某个属性何时发生变化,以便更新我的验证。我发现我可以bindingEngine.propertyObserver从这个答案中使用。

但是我的实例Box是由创建的BreezeJs,而不是 Aurelia。所以使用@inject(或@autoinject在我的情况下)获取实例bindingEngine是行不通的。

我看到aurelia.container.get会让我从 Aurelia 的 DI 框架中解决。但这需要Aurelia对象的当前实例。我能看到的唯一方法是......构造函数注入!

所以,要绕过构造函数注入,你需要......构造函数注入!

我希望我遗漏了一些东西,并且还有另一种方法可以在bindingEngine没有构造函数注入的情况下获取实例。

注意:现在我只需将变量转换为 javascript 属性并自行触发更改的事件。但我知道这会让我转向脏检查...... :(

4

1 回答 1

8

如果您想知道微风实体的属性何时发生变化,请使用entityAspect.propertyChanged事件:

http://breeze.github.io/doc-js/api-docs/classes/EntityAspect.html#event_propertyChanged

order.entityAspect.propertyChanged.subscribe(
function (propertyChangedArgs) {
    // this code will be executed anytime a property value changes on the 'order' entity.
    var entity = propertyChangedArgs.entity; // Note: entity === order
    var propertyNameChanged = propertyChangedArgs.propertyName;
    var oldValue = propertyChangedArgs.oldValue;
    var newValue = propertyChangedArgs.newValue;
});

不建议绕过构造函数注入。它违反了依赖倒置原则,但是有一种机制可以这样做:

main.js

export function configure(aurelia) {
  aurelia.container.makeGlobal();
  ...
}

盒子.js

import {Container} from 'aurelia-dependency-injection';

let bindingEngine = Container.instance.get(BindingEngine);
于 2016-03-25T18:44:48.647 回答