インスタンスのInterfaceをまるごとBindしてくれるBindInterfacesAndSelfToは便利だけど常に使うべきだろうか?
ざっくりとした違い
まずは違いについておさらい
Container.Bind<Foo>(); //FooをBindする
Container.Bind<IBar>().To<Bar>(); // Barに実装されているIBarをBindする。
Container.BindInterfaces<Bar>(); // Barに含まれるすべてのInterfaceをBindする
Container.BindInterfacesAndSelfTo<Bar>(); //Barに含まれるすべてのInterfaceとBarをBindする。
Zenjectでは次のInterfaceがBindされた時自動的に呼び出すようになっている
- ITickable
- IInitializable
- IDisposable
これらのInterfaceをBindした時に強制的にZenjectのライフサイクルに乗ってしまうのでこれを避けたい場合はBindInterfaces及びBindInterfacesAndSelfToを使うのを避けたほうが良いかもしれない。
また、複数のInterfaceを実装しているがZenjectで特定のInterfaceにしか用が無いならBindする対象を絞る方が良いだろう
BindInterfacesとBindInterfacesAndSelfToの使い分け
この2つの違いはInterfaceを実装しているクラスそのものもBindするかどうか
Interfaceにしか用が無いならBindInterfacesを使うしクラスそのものも使うのであればBindInterfacesAndSelfToで良いと思う
全部BindInterfacesAndSelfToでいいんじゃない?
そういうわけでもない。
あるかわからないけど初期化処理やDisposeのタイミングを自分でコントロールしたいような時はそれらを含めるべきじゃない。
手間じゃないなら
チームでやるような開発ならBindやBind.Toである程度制御したほうが良い気がする。
最終的に読みやすさとかメンテナンス性とかにつながってくると思う。
あとはせいぜいBindInterfaces…
とりあえずそんな感じ
Top comments (0)