UnityZenjectでInstallerなどを使ってバインド処理を書く際の設定をまとめます。参考Unity2018.2Zenject7.3.1設定一覧まず設定の一覧です。これらについて説明していきます。.IfNotBound();Bind()とTo()まずBind()は依存性を注入する対象の型を指定するためのメソッドです。このクラスあるいはインタフェースが定義され、Injectアトリビュートがついているフィールドに注入されます。これに対してTo()は実際に注入する型を指定するメソッドです。Bind()でインタフェースを指定してTo()でそれを実装するクラスの型を指定する、といった使い方をします。Bind()に指定した型と同じいいのであればTo()は書かなくてOKです。この型のインスタンスを注入するWithId()いま、同じインタフェースIExampleのフィールドが二つ定義されているとします。このうち片方にはこれを実装したExample1というクラスを、他方にはExample2というクラスを注入したいとします。Bind()では注入対象を型でしか判定できないため、このような場合にはWithId()を使います。使い方としてはまず注入対象のフィールドにInjectアトリビュートをID付きで定義します。Debug.Log(_example);}あとはWithId()の引数にこれを指定するだけです。.WithId("exampleId")ちなみにIDは文字列でもいいのですがEnumが推奨されているようです。_example;FromNew()これは「インスタンスをどのように生成するか」を定義しています。別記事で詳しく解説していますので下記を参照してください。light11.hatenadiary.comAsTransient()これは「注入が2回以上行われるときにインスタンスを再利用するかどうか」を定義します。次の三つのメソッドが存在します。インスタンスを再利用する二回以上Bind()されると例外になるAsCached()とAsSingle()がわかりづらいので例を挙げます。いまインタフェースIExampleとそれを実装するExampleがあり、これらをIExampleとExampleを注入するためのフィールドがそれぞれ定義されているとします。これらに対してまずAsCached()を使って依存性注入してみます。Example型とIExample型のフィールドにはそれぞれ別のExample型のインスタンスが注入されるContainer.Bind<Example>().AsCached();Container.Bind<IExample>().To<Example>().AsCached();これに対してAsSingle()を使って注入すると下記のようになります。Example型のインスタンスが二つ存在してはいけないためContainer.Bind<Example>().AsSingle();Container.Bind<IExample>().To<Example>().AsSingle();つまり、AsSingle()はシングルトンにしたいオブジェクトに定義するものだといえます。WithArgument()注入するオブジェクトを生成する際のコンストラクタに渡す引数を指定できます。.WithArguments("example");OnInstantiated()注入するオブジェクトが生成されたときのコールバックを指定できます。Debug.Log("instantiated."));When()注入対象を絞れます。注入対象のフィールドを持つコンポーネントの型に応じて注入するインスタンスを分ける場合は次のようにします。typeof(Target2));ちなみに上記のような用途の場合はWhenInjectedInto()を使って次のようにも書けます。.WhenInjectedInto<Target>();NonLazy()通常は実際に注入されるときに始めて注入するインスタンスが作られますが、NonLazy()を指定すると最初に作られます。IfNotBound()既に同じ型のインスタンスが一つでもバインドされていたらバインド処理をスキップします。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。インストールから基本的な使い方・注意点まとめ【Unity】【エディタ拡張】テクスチャを指定したUV座標で切り取って保存する【Unity】指定したアセットのAssetBundle名を取得する【Unity】【シェーダ】スクリプトからVP行列を渡してシェーダで座標変換に使う【Unity】【シェーダ】FloatやVectorをリニアライズ対象にするGammaアトリビュート月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。