Module のコンストラクタで Application のインスタンスを渡すようにすることで実現できますが、もっといい方法があります。
まず Component に @Component.Builder をつけた Builder インターフェースを用意します。
インタフェースの中に @BindsInstance アノテーションをつけたメソッドを用意し、Application インスタンスを渡せるようにします。
@Component(
modules = [
AppModule::class
]
)
internal interface AppComponent {
@Component.Builder
interface Builder {
fun build(): AppComponent
@BindsInstance
fun application(application: Application): Builder
}
...
}
あとは Component を構成するときに、用意したメソッドで Application インスタンスを渡すだけです。
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val appComponent = DaggerAppComponent
.builder()
.application(this)
.build()
...
}
}
生成されたコードでは DaggerAppComponent が application インスタンスを保持し、MembersInjector や Factory に適宜渡しています。
0 件のコメント:
コメントを投稿