ZenjectでDIの影響範囲を指定するContextの使い方まとめです。
Unity2018.2
Zenject7.3.1
Project Context
Project Contextはプロジェクト全体に影響を及ぼすContextです。
つまりこれにセットしたInstallerはすべてのシーンのフィールドに対してDIを行います。
使い方としては次の通りです。
- Projectビューで右クリック > Create > Zenject > Project Context
- 1.をResourcesフォルダに入れる
- InspectorからInstallerを設定する
- Scene Contextが設定されているSceneに置いて再生する
Project ContextはScene Contextの親となるためScene Contextが必要ですが、
Resourcesフォルダに入れておけば再生時に自動的に生成してくれます。
SceneContext
Scene ContextはそのSceneにあるものを対象としてDIします。
使い方は次の通りです。
- Hierarchyで右クリック > Zenject > Scene Context
- InspectorからInstallerを設定する
またScene ContextにはScene Context同士の親子関係を設定するContractという仕組みがあるのですが、
これはScene Parentingの節で説明します。
Game Object Context
Game Object Contextの影響範囲は、これをアタッチしたGame Objectとその子供たちのみです。
使い方は次の通りです。
- Hierarchyで右クリック > Zenject > Game Object Context
- InspectorからInstallerを設定する
また、Game Object Context同士を入れ子にしてもやはり影響範囲はそれぞれのGameObjectとその子供たちのみです。
影響範囲を図示すると以下のようになります。
Scene Parenting
いま、Scene ContextとDIのターゲットがそれぞれ一つずつ置かれている二つのSceneを同時に読み込むとします。
このとき、Contextの影響範囲は当然ですがそれぞれのSceneのみになります。
ただ、マルチシーンでZenjectを使っていると「あるScene Contextの影響範囲に他のSceneを加えたい」ということがあります。
そんな時にはScene ContextのContractを使います。
まず、Scene1のScene ContextのContract NameにMainと入力します(名前はなんでもいいですが)。
次にScene2のScene ContextのParent Contract Nameに先ほどと同じくMainと入力します。
そして、Scene1を読み込んでからScene2を読み込みます。
これでScene Context同士の親子関係が構築され、Scene1のScene ContextがScene2にも影響するようになりました。
Scene Decorator Context
最後にScene Decorator Contextを紹介します。
Scene Decorator Contextは別SceneのScene ContextにInstallerを追加する働きをします。
元のScene Contextに変更を加えずにInstallerを追加できるため、デバッグ用のDIを行うときに使うようです。
使い方としては、まず元のScene1のScene ContextのContract NameにMainと入力します。
次に別のScene2として作成し、Hierarchyで右クリック > Zenject > Decorator Contextを選択します。
そしてInspectorからDecorated Contextに先ほどのMainを入力し、適当なInstallerを設定します。
そして、Scene2を読み込んでからScene1を読み込みます。
これで元のScene ContextにInstallerが追加されたような振る舞いになりました。