У меня есть класс, который выглядит следующим образом:Как получить экземпляр EventAggregator без использования инъекции конструктора
@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) };
Я тогда просто опубликовать это сразу через ViewModel, который знает о EA.
Было бы лучше и понятнее, если бы элементы могли публиковать это сообщение сами, но для того, чтобы получить EventAggregator, я знаю только о вводе правильного экземпляра через конструктор. Это не так желательно, как я не хочу, чтобы передавать это каждый раз, когда я новый и элемент.
Есть ли способ получить правильный синтаксис EventAggregator из метода my take на экземпляре элемента?
Это смешнее, когда вопрос касается оружия, золота и бабло, не так ли? –
Думаю, я поеду с одним из этих вариантов и оберну его на фабрику товаров. Приветствия :) – 4imble