Daggerの導入に手間取ってしまったので次にDaggerを使う時のために取り急ぎ手順と注意点をメモしておきます。

とりあえず app/build.gradle にDaggerを追加。いらない行がありそう。

dependencies {
// Dagger
implementation "com.google.dagger:dagger:${DaggerVersion}"
implementation "com.google.dagger:dagger-android:${DaggerVersion}"
implementation "com.google.dagger:dagger-android-support:${DaggerVersion}"
annotationProcessor "com.google.dagger:dagger-compiler:${DaggerVersion}"
kapt "com.google.dagger:dagger-compiler:${DaggerVersion}"
kapt "com.google.dagger:dagger-android-processor:${DaggerVersion}"
}

バージョンは 2.22.1 を使っています。

ext {
CoroutineVersion = '1.1.1'
CoroutineAdapterVersion = '0.9.2'
RetrofitVersion = '2.5.0'
MoshiVersion = '1.8.0'
TimberVersion = '4.7.1'
ButterKnifeVersion = '10.1.0'
DaggerVersion= '2.22.1'
}

モジュールを作ります。

@Module
class AppModule {
@Provides
fun provideMainPresenter(): MainContract.Presenter = MainPresenter()
}

コンポーネントを作ります。

@Component(modules = [AppModule::class])
interface AppComponent {
fun inject(fragment: MainFragment)
}

ここまできたら一旦ビルドすると色々なものが作られます。これでDIできるようになりますので、実装していきます。

class MainFragment : Fragment(), MainContract.View {

@Inject lateinit var presenter: MainContract.Presenter

private val component = DaggerAppComponent.builder().appModule(AppModule()).build()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
component.inject(this)
presenter.setView(this)
}
}

appModule(AppModule()) のところは横線が引かれていましたが、ビルドしたら消えました。