2017-01-26 6 views
1

В aurelia возможно ли, чтобы пользовательский декоратор автоматически вставлял зависимости в классы, которые он украшает, или каждый украшенный класс должен сам вводить сами зависимости (по крайней мере, в его конструкторе) ?Включение зависимостей в классы с помощью специального декоратора в aurelia

Другими словами, это самое лучшее, что можно сделать:

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

Смежные вопросы