Kotlin Cookbook: A Problem-Focused Approach 新品価格 |
@ContributesAndroidInjectorを使ってFragmentにDaggerでInjectする
の続編
次はDaggerのAndoridサポートを使ってみる
・Activity
injectのコードが消せる
class MainActivity : DaggerAppCompatActivity() { @Inject lateinit var masterka: Masterka override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main_activity) if (savedInstanceState == null) { supportFragmentManager.beginTransaction() .replace(R.id.container, MainFragment.newInstance()) .commitNow() } Log.e("masterka", "masterka:$masterka") } }
・Fragment
injectのコードが消せる
class MainFragment : DaggerFragment() { companion object { fun newInstance() = MainFragment() } private lateinit var viewModel: MainViewModel @Inject lateinit var masterka: Masterka override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { return inflater.inflate(R.layout.main_fragment, container, false) } override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) Log.e("masterka2", "masterka:$masterka") } }
・Application
DaggerApplicationを継承してHasAndroidInjectorを消してoverrideするメソッドを変更
class MyApplication : DaggerApplication() { override fun onCreate() { super.onCreate() DaggerAppComponent.create().inject(this) } override fun applicationInjector(): AndroidInjector<out DaggerApplication> { return DaggerAppComponent.create() } }
・AppComponent
AndroidInjectorを継承する
@Singleton @Component( modules = [ AndroidInjectionModule::class, AppModule::class, ActivityBindingModule::class ] ) interface AppComponent : AndroidInjector<MyApplication> { }
これでボイラーコードをかなり消せませたとさ
そろそろDaggerも終わり
続くよ