2017-07-08 1 views
2

初めてangular-reduxライブラリについて学んだとき、ライブラリの最も魅力的な部分は@selectデコレータだったと思います。毎回store serviceを注入する必要はありませんでした私は店から選択したい。角度サービスのシングルトンインスタンスを保存する練習

デコレータはどのようにしてそのサービスにアクセスできますか?
私はソースコードを調査し、@selectNgRedux (the store service)コードを見つけました。

サービスが初期化されると、サービスのstatic instanceが保存され、decoratorはこのインスタンスにアクセスします。

私はアイデアを気に入っていると私は私のサービスのためのdecoratorsrxjs operatorsを作成するために、それを自分自身を使用していたことから、このような行為がどのように許容知りたいと思ったが、シングルトンを節約するアイデアは私のために、まだかなり独特ですそれは奇妙なハックのように感じる。

この練習がどれほど受け入れられるか、そしてこれを避けるためにAngularDependency Injectionを使用する方法があるかどうか、あなたの意見が大好きです。

読んでいただきありがとうございます!

答えて

0

NgModuleで定義されているサービスは、定義上、怠惰なシングルトンです。つまり、コンポーネントのprovidersセクションを使用してサービスをオーバーライドしない場合、サービスインスタンスへの参照を保存することは安全です。

主な欠点はテスト容易性の問題です。この場合は、この価格を便利な使い方で支払う必要があります。

+0

私の問題は、コンポーネント、ディレクティブ、パイプ、またはサービスにはありません。すべてが '@Injectable'です。私の問題は、 'decorator'や' rxjs演算子 'のような角のないもので、人々がコードをカスタマイズするために使用するものです。私はこのメソッドが動作することを知っています、それは私のコードで不思議ですが、私はこれを行うためのより多くの 'DI'-yの方法が存在することを望みました。 –

+0

AngularのDIは、プロキシやインターセプタに似た機能を提供せず、プロパティの注入をサポートしていないため、コンストラクタを経由せずにインジェクタ参照やサービスを取得することはできません。デコレーターを使用できるサービスを提供するためには、サービスのために工場を使用しなければならず、デコレーターを使用するサービスごとに配管を行う必要があります。カスタムrxjs演算子でサービスを使用する唯一のクリーンな方法は、それらを直接パラメータとして渡すことです。したがって、クリーンなデザインと使い勝手の間の妥協です。 – kemsky

関連する問題