Внедрение зависимостей в классы с помощью специального декоратора в 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 например, это разрешает зависимости от экземпляра при вызове при запуске.

Другие вопросы по тегам