Создайте новый экземпляр класса, который использует внедрение зависимостей в Aurelia
Я хочу создать фабрику, способную создавать новый экземпляр класса (MyClass, реализующий абстрактный класс), который использует внедрение зависимостей.
Я бы хотел, чтобы завод выглядел так:
завод
export class Factory {
public static makeMyClass() {
return new MyClass();
}
}
Однако EventAggregator не внедряется в MyClass, когда я использую этот подход.
Как я могу это сделать?
Интерфейс
export abstract class MyClassInterface {
abstract connect();
abstract disconnect();
abstract send(message: string);
}
Учебный класс
@inject(EventAggregator)
export class MyClass {
constructor(EventAggregator) {}
connect() {}
disconnect() {}
send(message: string) {}
}
Заранее спасибо!
1 ответ
Решение
Первый вариант
Использовать NewInstance.of
распознаватель:
import {inject, NewInstance} from 'aurelia-framework';
@inject(NewInstance.of(MyClass))
export class MyViewModel {
constructor(myClass) {
this.myClass = myClass; //myClass is always a new instance
}
}
Второй вариант
Используйте фабрику:
import {inject, EventAggregator} from 'aurelia-framework';
@inject(EventAggregator)
export class MyFactory {
constructor(eventAggregator) {
this.eventAggregator = eventAggregator;
}
public static createMyClass() {
return new MyClass(this.eventAggregator);
}
}
@inject(MyFactory)
export class MyViewModel {
constructor(myFactory) {
this.myClass = myFactory.createMyClass();
}
}