У меня есть класс, который выглядит так:
@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()
, я хочу опубликовать сообщение на основе типа элемента, на который нажали. Я взломал способ сделать это без того, чтобы элемент знал об EventAggregator, заставив метод take()
экземпляра элемента вернуть правильное сообщение.
Затем Gold
реализуется следующим образом: take() { return new GoldTaken(this) };
И тогда Weapon
реализуется так: take() { return new WeaponTaken(this) };
Затем я сразу же публикую это через модель представления, которая знает о советнике.
Было бы лучше и понятнее, если бы элементы могли публиковать это сообщение сами, но для того, чтобы получить EventAggregator, я знаю только внедрение правильного экземпляра через конструктор. Это не так желательно, так как я не хочу передавать это каждый раз, когда я обновляюсь и добавляю элемент.
Есть ли способ получить правильный синглтон EventAggregator из моего метода взятия экземпляра элемента?