无需构造函数注入即可访问 Aurelia 的依赖注入系统
Get access to Aurelia's Dependency Injection system without constructor injection
有没有一种方法可以在不注入构造函数的情况下访问 Aurelia 的依赖注入系统。
我有一个叫 Box
的 class。我需要知道它的其中一个属性何时发生变化,以便我可以更新我的验证。我发现我可以从这个 .
使用 bindingEngine.propertyObserver
但我的 Box
实例是由 BreezeJs
创建的,而不是 Aurelia。因此,使用 @inject
(或在我的情况下为 @autoinject
)来获取 bindingEngine
的实例是行不通的。
我看到aurelia.container.get
会让我从Aurelia的DI框架中解析。但这需要 Aurelia
对象的当前实例。我能看到的唯一方法是...构造函数注入!
因此,要绕过构造函数注入,您需要...构造函数注入!
我希望我遗漏了一些东西,还有另一种方法可以在没有构造函数注入的情况下获取 bindingEngine
的实例。
注意:现在我只是将我的变量转换为 javascript 属性 并自行触发更改的事件。但我知道这会让我进行脏检查...:(
如果您想知道 breeze 实体的属性何时更改,请使用 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;
});
不推荐规避构造函数注入。它违反了 dependency inversion principle,但是有一种机制可以这样做:
main.js
export function configure(aurelia) {
aurelia.container.makeGlobal();
...
}
box.js
import {Container} from 'aurelia-dependency-injection';
let bindingEngine = Container.instance.get(BindingEngine);
有没有一种方法可以在不注入构造函数的情况下访问 Aurelia 的依赖注入系统。
我有一个叫 Box
的 class。我需要知道它的其中一个属性何时发生变化,以便我可以更新我的验证。我发现我可以从这个
bindingEngine.propertyObserver
但我的 Box
实例是由 BreezeJs
创建的,而不是 Aurelia。因此,使用 @inject
(或在我的情况下为 @autoinject
)来获取 bindingEngine
的实例是行不通的。
我看到aurelia.container.get
会让我从Aurelia的DI框架中解析。但这需要 Aurelia
对象的当前实例。我能看到的唯一方法是...构造函数注入!
因此,要绕过构造函数注入,您需要...构造函数注入!
我希望我遗漏了一些东西,还有另一种方法可以在没有构造函数注入的情况下获取 bindingEngine
的实例。
注意:现在我只是将我的变量转换为 javascript 属性 并自行触发更改的事件。但我知道这会让我进行脏检查...:(
如果您想知道 breeze 实体的属性何时更改,请使用 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; });
不推荐规避构造函数注入。它违反了 dependency inversion principle,但是有一种机制可以这样做:
main.js
export function configure(aurelia) {
aurelia.container.makeGlobal();
...
}
box.js
import {Container} from 'aurelia-dependency-injection';
let bindingEngine = Container.instance.get(BindingEngine);