こちらの本を買ったのでZenject勉強する
booth.pm
まずInterfaceを完全に理解しないといけない。 Interface使ったことないから、何度読んでも忘れてしまう 密結合を疎結合にしていっても、誰かは依存関係を知っている必要がある。 知っているクラスがDIコンテナ DIコンテナを自分で作るのは大変らしい。 そこでZenject modesttree社のリポジトリが元 メインの人がmodesttree社を退職して、Zenjectをフォークして機能追加をしているのがExtenject 続き物だったんだ~ ちなみにExtenjectも配布しているunitypackage名はzenjectだった ーー Zenjectとは違うDIコンテナとしてVContainerというのを日本の方?が作っているみたい 使ってみる。zenject(extenject)のv9.1.0を入れた。 二つのC#をを作る。片方から片方を参照する ZenjectBindingというコンポーネントをどこかにつけて、それに渡したいコンポーネントをセットする DIコンテナに情報を登録することをBind バインドしたオブジェクトを渡すことをInject Injectしたいところに[Inject]と付ける(呼び出す側) ヒエラルキーでZenject>SceneContextを作る。 コンテナを使ってInject を行うのがContext SceneContextはContextの一種 これが一連の流れみたい! ContextとInjectの図示の仕方がよくわからないが、まあいいや 今回BindはZenjectBindingというコンポーネントを使ったけど、スクリプトからもBindできる。 ZenjectBindingが使えるのはMonobehaviorなクラスの時のみ。 スクリプトからBindするときはInstallerというクラスを定義して、その中に書く Create>Zenject>MonoInstallerでC#ができる こんな感じ この中に Container.Bind<XXXX>().AsCached(); と書いてBindする そしてInstallerをどこかのオブジェクトに付けて、SceneContextのMonoInstallerにそのオブジェクトをタッチ!!! これでBindできた Container.Bind<XXXX>().AsCached(); のAsCachedの部分は何種類かある。 AsSingledはXXXインスタンスが一つしか生成されないことを保証する=シングルトンらしい。シングルトン・・・ Container.Bind以下はいろいろ種類があるらしい。本にも全部乗せれないレベル!すごーい。とはいえよく使うのは載っているらしいので、辞書的な感じで使えそう? 公式のドキュメントはリポジトリのreadmeみたい。すごい長い GitHub - modesttree/Zenject: Dependency Injection Framework for Unity3D クラス名はIExampleだけど、実際にInjectするのはExampleの時? Container.Bind<IExample>().To<Example>() フィールドに直接つけてもいいし、メソッドに付けてもいい メソッドのほうが推奨されている。 zenjectを使わないとなった時に、メソッドのほうだと変更が少なくて済む ・動的にBindする ・シーンをまたいだDI パラメーターを渡すZenjectSceneLoader プロジェクト全体のContextであるProjectContextを使う。 マルチシーンを使うときはParentContract DecoratorContextInterface
DIコンテナ
Zenject
Zenject使ってみる
Bind,Inject,Context
Bind
Installer
Inject
その他