<AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> 如果没有 @Provides 注释方法,则无法提供
<AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method
当我对非 supportLibrary 使用 AndroidInjector 时
class MainApplication: DaggerApplication() {
override fun applicationInjector(): AndroidInjector<MainApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])
interface AppComponent: AndroidInjector<MainApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MainApplication): Builder
fun build(): AppComponent
}
}
@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [MainActivityModule::class])
abstract fun bindMainActivity(): MainActivity
}
class MainActivity : DaggerActivity() {
@Inject lateinit var info : Info
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
my_text.text = info.text
}
}
class Info {
val text = "Hello Dagger Android"
}
@Module
class MainActivityModule {
@Provides
fun getInfo() = Info()
}
一切正常。但是,当我更改为支持版本时
class MainApplication: dagger.android.support. DaggerApplication() {
override fun applicationInjector(): AndroidInjector<MainApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])
interface AppComponent: AndroidInjector<MainApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MainApplication): Builder
fun build(): AppComponent
}
}
@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [MainActivityModule::class])
abstract fun bindMainActivity(): MainActivity
}
class MainActivity : DaggerAppCompatActivity() {
@Inject lateinit var info : Info
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
my_text.text = info.text
}
}
class Info {
val text = "Hello Dagger Android"
}
@Module
class MainActivityModule {
@Provides
fun getInfo() = Info()
}
我有这个错误。是什么原因造成的?
error: [Dagger/MissingBinding] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method.
public abstract interface AppComponent extends dagger.android.AndroidInjector<com.elyeproj.demodaggerandroid.MainApplication> {
^
java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at
dagger.android.DispatchingAndroidInjector(…, boundedInjectorFactoriesWithClassKeys, …)
dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at
dagger.android.support.DaggerApplication.supportFragmentInjector
com.elyeproj.demodaggerandroid.MainApplication is injected at
dagger.android.AndroidInjector.inject(T)
The following other entry points also depend on it:
dagger.android.AndroidInjector.inject(T) [com.elyeproj.demodaggerandroid.AppComponent → com.elyeproj.demodaggerandroid.ActivityBuilder_BindMainActivity.MainActivitySubcomponent]
显然我有 AndroidSupportInjectionModule
而不是 AndroidInjectionModule
即
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])
至
@Component(modules = [AndroidSupportInjectionModule::class, ActivityBuilder::class])
当我对非 supportLibrary 使用 AndroidInjector 时
class MainApplication: DaggerApplication() {
override fun applicationInjector(): AndroidInjector<MainApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])
interface AppComponent: AndroidInjector<MainApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MainApplication): Builder
fun build(): AppComponent
}
}
@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [MainActivityModule::class])
abstract fun bindMainActivity(): MainActivity
}
class MainActivity : DaggerActivity() {
@Inject lateinit var info : Info
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
my_text.text = info.text
}
}
class Info {
val text = "Hello Dagger Android"
}
@Module
class MainActivityModule {
@Provides
fun getInfo() = Info()
}
一切正常。但是,当我更改为支持版本时
class MainApplication: dagger.android.support. DaggerApplication() {
override fun applicationInjector(): AndroidInjector<MainApplication> {
return DaggerAppComponent.builder().application(this).build()
}
}
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])
interface AppComponent: AndroidInjector<MainApplication> {
@Component.Builder
interface Builder {
@BindsInstance
fun application(application: MainApplication): Builder
fun build(): AppComponent
}
}
@Module
abstract class ActivityBuilder {
@ContributesAndroidInjector(modules = [MainActivityModule::class])
abstract fun bindMainActivity(): MainActivity
}
class MainActivity : DaggerAppCompatActivity() {
@Inject lateinit var info : Info
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
my_text.text = info.text
}
}
class Info {
val text = "Hello Dagger Android"
}
@Module
class MainActivityModule {
@Provides
fun getInfo() = Info()
}
我有这个错误。是什么原因造成的?
error: [Dagger/MissingBinding] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method.
public abstract interface AppComponent extends dagger.android.AndroidInjector<com.elyeproj.demodaggerandroid.MainApplication> {
^
java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at
dagger.android.DispatchingAndroidInjector(…, boundedInjectorFactoriesWithClassKeys, …)
dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at
dagger.android.support.DaggerApplication.supportFragmentInjector
com.elyeproj.demodaggerandroid.MainApplication is injected at
dagger.android.AndroidInjector.inject(T)
The following other entry points also depend on it:
dagger.android.AndroidInjector.inject(T) [com.elyeproj.demodaggerandroid.AppComponent → com.elyeproj.demodaggerandroid.ActivityBuilder_BindMainActivity.MainActivitySubcomponent]
显然我有 AndroidSupportInjectionModule
而不是 AndroidInjectionModule
即
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])
至
@Component(modules = [AndroidSupportInjectionModule::class, ActivityBuilder::class])