@Injectをいつ使用するのか、@ Injectableをいつ使用するのかわかりませんか?
import {Component, Inject, provide} from '@angular/core';
import {Hamburger} from '../services/hamburger';
export class App {
bunType: string;
constructor(@Inject(Hamburger) h) {
this.bunType = h.bun.type;
}
}
そして..
import {Injectable} from '@angular/core';
import {Bun} from './bun';
@Injectable()
export class Hamburger {
constructor(public bun: Bun) {
}
}
_@Injectable
_デコレータは、関連するクラスのコンストラクタに注入する依存関係に関するメタデータを実際に設定することを目的としています。これは、パラメーターを必要としないクラスデコレーターです。このデコレータがないと、依存関係は注入されません。
_@Injectable()
export class SomeService {
constructor(private http:Http) {
}
}
_
_@Inject
_デコレータは、注入する要素に関するメタデータを指定するために、コンストラクターパラメーターのレベルで使用する必要があります。これがないと、パラメーターのタイプが使用されます(_obj:SomeType
_は@Inject(SomeType) obj
と同等です)。
_@Injectable()
export class SomeService {
constructor(@Inject(Http) private http:Http, @Inject('sometoken') obj) {
}
}
_
は、パラメータを挿入する必要があることをAngularに知らせるための手動メカニズムです。
TypeScriptを使用する場合、@ Injectはプリミティブを挿入するためにのみ必要です。例:
export class AppComponent {
encryption = this.chatWidget.chatSocket.encryption;
constructor(@Inject(ChatWidget) private chatWidget) { }
}
Angularは、クラスが依存性注入で使用できることを知らせます。
例:
@Injectable()
export class ChatWidget {
constructor(
public authService: AuthService,
public authWidget: AuthWidget,
public chatSocket: ChatSocket) { }
}
上記の例では、Angularのインジェクターは、型情報を使用してChatWidgetのコンストラクターに何を注入するかを決定します