Android+Guice その6
※2012・10 こちらのページにまとめるようにしてみました。
注入するObjectの作成が簡単ではない場合、Injectionだけで全部Objectを作ろうとするとちょっと大変です。
こういう場合に使える@Providesメソッドの使い方です。
Moduleクラスはオブジェクトの作り方を示すわけですが、configure()内でbindする以外に、注入するオブジェクトをMethodで作って渡す事が出来ます。
見れば分かると思いますが、この場合bindは必要ありません。bindするとエラーになります。
InjectorはServiceの実装を供給するためにはMethodを呼び出せば良い事だけ知っていれば事たりるからです。
二点ほど注意ですが、Scopeの設定やSingletonの実装をする責任はProvides Method側にあります。
ServiceImplのclass定義に@Singletonアノテーションを追加してもSingletonにはなりません。
代わりに@Provides Method側に@Singletonを追加する事でSingletonになります。
もう一点はProvider内から例外を投げるのは許可されていないとのこと。この場合@CheckedProvidesを使うべきとのこと。これについては別の機会に書こうかなと。
他にもAnnotated BindingsとかConstructor Bindingsとかありますが、個人的にあまり使用しない(Constructor BindingsはAOPを利用しない場合、普通にProvides Methodで十分対処可能)ここら辺はとりあえず放置して、
次回からはAndroidのアプリケーションでの使用をテストしてみたいと思います。