Внедрение зависимостей в классы с помощью специального декоратора в aurelia
В aurelia можно ли сделать так, чтобы пользовательский декоратор автоматически вставлял зависимости в декорируемые им классы или каждый декорированный класс должен сам вводить зависимости (по крайней мере, в своем конструкторе)?
Другими словами, это лучшее, что можно сделать:
Custom Decorator (my-decorator.js)
import {inject} from 'aurelia-framework';
import {Dependency} from 'dependency';
export function MyDecorator() {
return function(target) {
inject(Dependency)(target);
}
}
Декорированный класс
import {MyDecorator} from "my-decorator";
@MyDecorator()
export class DecoratedClass {
constructor(dependency) {
this.dependency = dependency;
}
}
1 ответ
inject
свойство класса обычно статично. Когда используется большинство распознавателей, они просто "увеличивают" свойство статического ввода, чтобы контейнер мог разрешить их, используя указанный распознаватель, и передать их конструктору. Я не знаю, что декоратор класса помог бы в этом случае, поскольку он не украшает экземпляр в любом случае, о котором я могу думать, хотя я могу ошибаться.
Если вы пытаетесь создать новый экземпляр и по-прежнему используете DI для разрешения зависимостей, вам следует обратиться к Factory
решатель, который поддерживает это.
Если вы пытаетесь полностью оставить конструктор в покое, другой идеей было бы украсить свойство или функцию, которая использует полностью отдельное свойство. static customInject
например, это разрешает зависимости от экземпляра при вызове при запуске.