ZenjectでScene上のコンポーネントを簡単にバインドできる機能、Zenject Bindingの説明です。
Unity2018.2
Zenject7.3.1
Zenject Binding?
Zenject BindingとはSceneに置いたGameObjectにアタッチしたコンポーネントを
他のコンポーネントのフィールドに簡単に依存性注入するためのものです。
下記の記事で少し触れましたが、改めて解説します。
簡単な使い方
Zenject Bindingの使い方は次の通りです。
こんな感じになります。
後は再生すれば依存性が解決されます。
Bind Type
Zenject BindingにはBind Typeというフィールドがあります。
この設定により挙動が以下のように変わります。
名前 | 説明 |
---|---|
Self | 自身の型のフィールドを対象に依存性注入する |
All Interfaces | 自身のインタフェースの型のフィールドだけを対象に依存性注入する |
All Interface And Self | 自身あるいは自身のインタフェースの型のフィールドを対象に依存性注入する |
Base | 自身の基底クラスの型のフィールドだけを対象に依存性注入する |
Identifier
依存性を注入する先のフィールドにはInject
アトリビュートを付けますが、
これにはIdという引数を付与できます。
[Inject(Id = "exampleId")] private Example _example;
Zenject BindingのIdentifierフィールドにこのIdを設定すると、
特定のコンポーネントのみに依存性注入ができます。
Installerを書く場合のWithId()
と同じです。
Container
.Bind<IExample>()
.To<Example>()
.WithId("exampleId")
Use Scene ContextとContext
GameObjectContextの配下のGameObjectにZenject Bindingを使うようなケースで
Use Scene Contextにチェックを入れると、影響範囲がScene Contextのそれになります。
またContextに直接Contextを入れることもできますが、ややこしくなるのであまりやらないほうがよさそうな気がします。