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する。

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)

Update Your DEV Experience Level:

Settings

Go to your customization settings to nudge your home feed to show content more relevant to your developer experience level. 🛠