Java 没有针对类别的喷油器出厂限制<&燃气轮机;
我在stack中看到了相同的问题,但他们试图用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>{
@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