Создайте новый экземпляр класса, который использует внедрение зависимостей в 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();
  }
}
Другие вопросы по тегам