Skip to main content

DaggerのAndroid Supportを使ってみた

Kotlin Cookbook: A Problem-Focused Approach

新品価格
¥4,261から
(2020/3/1 11:25時点)


@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も終わり
続くよ

関連記事:

Pocket