DEV Community

enpel
enpel

Posted on

ZenjectのBindメソッドって何を使えば良いんだろう

インスタンスの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する。
Enter fullscreen mode Exit fullscreen mode

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)