7

@Injectable()angular 2のサービスに装飾を追加する必要性を理解しようとしています.

ドキュメントから: https://angular.io/docs/ts/latest/guide/dependency-injection.html

HeroesComponent に @Injectable() を追加してみませんか? 本当に必要に応じて追加できます。HeroesComponent はすでに @Component で装飾されているため、必要ありません。TypeScript は、デコレータを使用して任意のクラスのメタデータを生成します。任意のデコレータが行います。

したがって、基本的に@Injectable()は、他の装飾が利用できない場合にのみ追加する必要があります。利用可能なタイプの装飾がある場合、typescript コンパイラーは、コンストラクターに渡した変数に基づいて依存関係情報を自動的に生成するためです。constructor(private logger: Logger)

これは正しいですか?ありがとう

4

1 に答える 1

9

名前は少し奇妙だと思いますが、ベストプラクティスのために追加するように言われる理由が本当にわかりません。すべてのクラスに追加することがベストプラクティスである場合、なぜそれが必要なのかまったくわかりません。コンストラクターが何かを注入する必要があるかどうかをフレームワークにすべてのクラスでチェックさせる方が簡単です。これは、常に (モック) メタデータを生成する typescript のコマンドライン プロパティで解決できた可能性があります。

常に追加するというアドバイスは、コンパイラに常にメタデータを追加させるのと似ていると思います(これは、私が知る限り不可能です)。また、(警戒して) のみ (そして常に) 注入する必要があるクラスに追加することもできます。たとえ別のデコレータがあったとしてもです。それがおそらく最も明確な解決策になるでしょうが、ずさんであることは悪いことでもあり、良いことでもあります。この場合、あなたが裁判官になります。

TL;DR他のデコレーター がなく、コンストラクターにservices /etc を注入する必要がある場合は、それが必要です。

于 2016-01-05T13:14:04.093 に答える