Laravel サービスプロバイダーは複数の実装をバインドします。依存関係の注入中にどのクラスがインスタンス化されるかを決定する方法は?

WBOY
リリース: 2016-08-04 09:21:50
オリジナル
2158 人が閲覧しました

リーリー

返信内容:

リーリー

まず第一に、サービスコンテナ (Service Container) の動作について間違った理解をしています。

まず、次のようにバインディング サービス ID的方式定义的服务,只能通过服务ID を通じて取得します。 リーリー

2 番目に、インターフェースのタイプヒント (

) を通じてサービスを自動的に解析して注入したい場合は、次のようなことを行う必要があります: Type Hint リーリー

サービスに注入する必要があるオブジェクトがサービス コンテナ (

) を通じて解析される場合、タイプ ヒント (Service Container)来解析的,才可以使用类型提示(Type Hint)来进行自动解析并注入服务。以下这些类的实例都是通过服务容器来解析的:controllers, event listeners, queue jobs, middleware等,以及自己绑定到服务容器(Service Container) を使用してサービスを自動的に解析して挿入できます。次のクラスのインスタンスは、サービス コンテナ (

) にバインドされたサービスだけでなく、コントローラ、イベント リスナー、キュー ジョブ、ミドルウェア など、サービス コンテナを通じて解決されます。

3 番目に、上記のように、インターフェイスをインスタンスにバインドすると、バインドしたインスタンスである 1 つのインスタンスのみに自動的に解決されます。必要な結果が別のクラスである場合、コンストラクターは型ヒント (Type Hint)相同的接口,注入不同的实例,可以像下边这样(上下文绑定,Context Binding) を使用します。異なるインスタンスを挿入する同じインターフェースは次のようになります (コンテキスト バインディング、Context Binding):

リーリー

コンテキスト バインディングを通じて、A のインスタンスは Weixin のインスタンスに注入され、B のインスタンスは Ali のインスタンスに注入されます。以下のように:

リーリー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート