2017-01-26 4 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を使用するプロパティまたは関数をデコレートすることです。

関連する問題