そろそろDagger2を勉強しようと思った
そんなわけで、AndroidにDagger2を入れた簡単なサンプルを作ってみた
・build.gradle
kaptはkotlinのannotation対応
1 2 3 4 5 |
apply plugin: 'kotlin-kapt' implementation "com.google.dagger:dagger:2.16" annotationProcessor "com.google.dagger:dagger-compiler:2.16" kapt "com.google.dagger:dagger-compiler:2.16" |
・Activity
@Injectに目的のやつを入れる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class MainActivity : AppCompatActivity() { @Inject lateinit var mModel : ModelInterface override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val appComponent = DaggerAppComponent.builder() .modelModule(ModelModule()) .build() appComponent.inject(this) mModel.debug() } } |
・Component
TargetはMainActivity
modulesはprovideで、モデルを入れる前の処理
1 2 3 4 5 |
@Singleton @Component(modules = [(ModelModule::class)]) interface AppComponent { fun inject(activity: MainActivity) } |
・Provide
Componentに設定するmodules
providesで実際のクラスをreturnする
1 2 3 4 5 6 7 8 9 |
@Module class ModelModule { @Provides @Singleton fun provideModelInterface(): ModelInterface { return Model() } } |
・Module
そして、モジュールのクラス
1 2 3 4 5 6 7 8 9 10 |
interface ModelInterface { fun debug() } class Model : ModelInterface { override fun debug() { Log.d("hello", "hello") } } |
これで実行すると
ActivityのmModelにModelクラスのインスタンスが入って
helloが実行されましたとさ。
この後はこれみるとテスト時はcomponentを変えて、
Provideとモデルを変えてる模様
https://qiita.com/ikota/items/d118088db5c8eaa68bd0
この他にDagger2 Android Supportなんてものもあるらしいし
Dagger2のオーバービューがよくわからん
勉強はしばらく続けようと思います。
・参考
https://qiita.com/SYABU555/items/43b9d9edc100c92970d0
関連記事:
- Dagger2のAndroidサンプルからBuilderの動きについて調べてみた
- @Subcomponentを使ってActivityにDaggerでInjectする
- @ContributesAndroidInjectorを使ってActivityにDaggerでInjectする
2 thoughts to “AndroidにDagger2を入れた簡単なサンプル”
コメントは受け付けていません。