【发布时间】:2017-05-20 03:19:42
【问题描述】:
我有一个看起来像这样的类:
@inject(EventAggregator)
export class LootStack {
stack: Array<Item.Loot> = [];
constructor(private eventAggregator: EventAggregator) {
this.eventAggregator.subscribe(MonsterKilled, () => {
this.stack.push(new Item.Gold());
this.stack.push(new Item.Weapon("Thunderfury, Blessed Blade of the Windseeker"));
});
}
takeItem(lootItem: Item.Loot){
this.eventAggregator.publish(lootItem.take()) <--- returns specific message
this.stack.remove(lootItem);
}
}
当takeItem() 被调用时,我想根据点击的项目类型发布一条消息。通过让项目实例上的take() 方法返回正确的消息,我已经在不让项目知道 EventAggregator 的情况下一起破解了一种方法。
Gold 然后像这样实现:
take() { return new GoldTaken(this) };
然后Weapon 是这样实现的:
take() { return new WeaponTaken(this) };
然后我会立即通过知道 EA 的视图模型发布此内容。
如果项目可以自己发布此消息会更好更清晰,但为了获得 EventAggregator 我只知道通过构造函数注入正确的实例。这不是那么理想,因为我不想每次我更新和项目时都传递这个。
有没有办法让我从项目实例的 take 方法中获取正确的 EventAggregator 单例?
【问题讨论】:
标签: typescript dependency-injection aurelia eventaggregator