Java 没有针对类别的喷油器出厂限制<&燃气轮机;

Java 没有针对类别的喷油器出厂限制<&燃气轮机;,java,android,kotlin,dagger-2,model-view,Java,Android,Kotlin,Dagger 2,Model View,我在stack中看到了相同的问题,但他们试图用@ContributesAndroidInjector修复错误,但在Dagger文档中说,使用@ContributesAndroidInjector只是可选的,所以我的类如下: 我的主要活动组件: @Subcomponent(modules = [ MainBuilder::class ]) @ActivityScope interface MainComponent: AndroidInjector<MainActivity>{

我在stack中看到了相同的问题,但他们试图用
@ContributesAndroidInjector
修复错误,但在
Dagger
文档中说,使用
@ContributesAndroidInjector
只是可选的,所以我的类如下:

我的
主要活动组件

@Subcomponent(modules = [
    MainBuilder::class
])
@ActivityScope
interface MainComponent: AndroidInjector<MainActivity>{

    @Subcomponent.Factory
    interface Factory: AndroidInjector.Factory<MainActivity>
}
我的
BaseActivity
谁扩展了我的
MainActivity

abstract class BaseActivity: HasSupportFragmentInjector, AppCompatActivity() {

    @Inject
    lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Fragment>

    override fun onCreate(savedInstanceState: Bundle?) {
        AndroidInjection.inject(this)
        super.onCreate(savedInstanceState)
    }

    override fun supportFragmentInjector(): AndroidInjector<Fragment> {
        return dispatchingAndroidInjector
    }
}
抽象类BaseActivity:HasSupportFragmentInjector,AppCompativity(){
@注入
lateinit var分派AndroidInjector:分派AndroidInjector
重写创建时的乐趣(savedInstanceState:Bundle?){
雄激素注射。注射(这个)
super.onCreate(savedInstanceState)
}
重写fun supportFragmentInjector():AndroidInjector{
回程调度和回程调度
}
}

我如何解决这个问题?

实际上,dagger文档中说:

专业提示:如果您的子组件及其工厂没有其他方法或 除了步骤2中提到的超类型之外,您可以使用 @为您贡献并生成它们。而不是步骤 2和3,添加一个返回活动的抽象模块方法, 用@ContributesAndroidInjector对其进行注释,并指定模块 您希望安装到子组件中。如果子组件需要 范围,也将范围注释应用于方法

因此,基本上,
@ContributesAndroidInjector
将生成您正在手动执行的子组件。由于您的案例与此步骤中的
Daggers
文档相匹配,因此您可以自由使用
@ContributesAndroidInjector

例如:

@Singleton
@Component(
    modules = [AndroidInjectionModule::class, ActivityModule::class, BroadCastReceiversModule::class,...]
)
interface AppComponent {
    fun inject(pocketTreasureApplication: MyApplication)

    @Component.Factory
    interface Factory {
        fun create(@BindsInstance application: Application): AppComponent
    }
}
AndroidInjectionModule
没有匕首。在这种情况下,它告诉
Dagger
:嘿,我们有Android组件要处理,而
Dagger
知道如何生成它们

然后,您应该使用模块,如
ActivityModule
来生成扩展
活动
片段
服务
广播接收器
等的类

因此,
活动模块持有
@ContributesAndroidInjector`:

    @Singleton
    @ContributesAndroidInjector(modules = [FragmentModule::class])
    abstract fun contributeMainactivity(): MainActivity
现在的
Dagger
知道您可以神奇地在
MainActivity
上注入依赖项。 同样适用于其内部的
碎片模块

main活动中,您可以执行以下操作:

AndroidInjection.inject(this)
并注入依赖项


就这些。你可以查看更多关于Dagger Android的个人文章

如果我想注入我的
ViewModels
应该是片段中的模块吗?不,模块与片段没有任何关系
    @Singleton
    @ContributesAndroidInjector(modules = [FragmentModule::class])
    abstract fun contributeMainactivity(): MainActivity