Допустим, вы создали модуль Android с именем cookie, который содержит действие и модуль кинжала.
CookieActivity:
class CookieActivity : DaggerAppCompatActivity() {
@Inject
lateinit var name: String
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_cookie)
findViewById<TextView>(R.id.name).text = name
}
}
CookieModule:
@Module
abstract class CookieModule {
@ContributesAndroidInjector
abstract fun cookieActivity(): CookieActivity
@Module
companion object {
@Provides
@JvmStatic
fun provideName() = "Oreo"
}
}
Теперь вы хотите использовать это CookieActivity
из вашего основного приложения.Сначала вам нужно создать AppComponent
(обратите внимание, что CookieModule
установлен внутри компонента):
@Singleton
@Component(modules = [AndroidSupportInjectionModule::class, CookieModule::class])
interface AppComponent : AndroidInjector<App>
Затем ваш класс Application
может вводить активность и фрагмент:
class App : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
internal lateinit var dispatchingActivityInjector: DispatchingAndroidInjector<Activity>
@Inject
internal lateinit var dispatchingFragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
DaggerAppComponent.builder()
.build()
.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity>? {
return dispatchingActivityInjector
}
override fun supportFragmentInjector(): AndroidInjector<Fragment>? {
return dispatchingFragmentInjector
}
}
Теперь вы можете использовать CookieActivity
, и основное приложение позаботится об инъекции:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.button).setOnClickListener {
val intent = Intent(this, CookieActivity::class.java)
startActivity(intent)
}
}
}
«Oreo» будет отображаться в соответствии с CookieModule
.