пожалуйста, помогите мне!У меня проблема с использованием кинжала 2.
Я хочу связать некоторую зависимость во время выполнения, а не во время компиляции внутри MainActivity
, используя @Subcomponent.Builder
и @BindsInstance
У меня естьApplicationComponent и он имеет Builder, и его @BindsInstance выглядит нормально.Я могу использовать, как показано ниже
DaggerApplicationComponent
.builder()
.application(this)
.build()
.inject(this)
, но некоторые неполадки возникли из MainActivity ...
ниже приведены фрагменты кодов
[ApplicationComponent]
@Singleton
@Component(modules = [ApplicationModule::class])
internal interface ApplicationComponent : AndroidInjector<MyApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: Application): Builder
fun build(): ApplicationComponent
}
}
[ApplicationModule]
@Module(
includes = [
AndroidInjectionModule::class,
AndroidSupportInjectionModule::class,
ActivityInjectionModule::class
],
subcomponents = [
MainComponent::class
]
)
internal abstract class ApplicationModule {
@PerActivity
@ContributesAndroidInjector(modules = [SplashModule::class])
abstract fun splashActivity(): SplashActivity
@Binds
@IntoMap
@ActivityKey(MainActivity::class)
abstract fun mainActivity(builder: MainComponent.Builder): AndroidInjector.Factory<out Activity>
}
[MainComponent]
@PerActivity
@Subcomponent(modules = [MainModule::class])
internal interface MainComponent : AndroidInjector<MainActivity> {
@Subcomponent.Builder
abstract class Builder : AndroidInjector.Builder<MainActivity>() {
@BindsInstance
abstract fun testClass(mainTestClass: MainTestClass): Builder
}
}
[MainActivity]
internal class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// This works find without runtime injection
// AndroidInjection.inject(this)
/**
*I want to bind some dependency(in this case, MainTestClass) in runtime like below.
* so that I can use MainTestClass inside MainModule to inject this to other classes.
* but, for some reason,
* DaggerMainComponent IS NOT GENERATED AUTOMATICALLY...
*/
DaggerMainComponent.builder()
.testClass(MainTestClass())
.build()
.inject(this);
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
startActivity(Intent(this, SplashActivity::class.java))
}
}
Проблема заключается в том, что я не могу получить доступ к DaggerMainComponent, поскольку кинжал нене генерировать это автоматически.Я ищу много сайтов, чтобы решить эту проблему, но не удалось.Есть ли способ сделать это?