首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><AndroidInjector.Factory<?如果没有@ android.support.v4.app.Fragment>>>注解的方法,则无法提供扩展提供

<AndroidInjector.Factory<?如果没有@ android.support.v4.app.Fragment>>>注解的方法,则无法提供扩展提供
EN

Stack Overflow用户
提问于 2019-01-09 17:52:49
回答 1查看 556关注 0票数 0

当我为非supportLibrary使用如下所示的AndroidInjector时

代码语言:javascript
复制
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()
}

所有工作都很好。但是,当我更改为支持版本时

代码语言:javascript
复制
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()
}

我有这个错误。是什么原因?

代码语言:javascript
复制
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] 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-09 17:54:32

显然,我用AndroidSupportInjectionModule代替了AndroidInjectionModule,即

代码语言:javascript
复制
@Component(modules = [AndroidInjectionModule::class, ActivityBuilder::class])

代码语言:javascript
复制
@Component(modules = [AndroidSupportInjectionModule::class, ActivityBuilder::class])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54107307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档