首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Dagger 2中使用SubComponent注入类

无法在Dagger 2中使用SubComponent注入类
EN

Stack Overflow用户
提问于 2019-10-28 22:46:26
回答 2查看 52关注 0票数 0

我正在尝试在一个项目中添加Dagger 2。我已经创建了3个组件

代码语言:javascript
复制
AppComponent (the primary one)
RetrofitComponent (Dependent component works fine)
ControllerComponent (Subcomponent, not injecting properly)

这是我的AppComponent

代码语言:javascript
复制
@ApplicationScope
@Component(modules = [ApplicationModule::class, PrefModule::class])
interface AppComponent {

fun inject(instance: AppInstance)

fun getAppPref(): AppPreference

fun newControllerComponent(controllerModule: ControllerModule): ControllerComponent
}

这是我的ControllerComponent

代码语言:javascript
复制
@UIScope
@Subcomponent(modules = [ControllerModule::class])
interface ControllerComponent {

fun injectActivity(activity: BaseActivity)

fun injectDialog(dialog: BaseDialog)
}

ControllerModule

代码语言:javascript
复制
@Module
class ControllerModule(activity: FragmentActivity) {
var mActivity: FragmentActivity

init {
    mActivity = activity
}

@Provides
fun getContext(): Context {
    return mActivity
}

@Provides
fun getActivity(): Activity {
    return mActivity
}

@Provides
fun getFragmentManager(): FragmentManager {
    return mActivity.supportFragmentManager
}

@Provides
fun getDialogManager(fragmentManager: FragmentManager): DialogsManager 
{
    return DialogsManager(fragmentManager)
}

@Provides
fun getDialogsFactory(): DialogsFactory {
    return DialogsFactory()
}

}

注入活动运行良好,但当我尝试注入Dialog时,它从未注入过

代码语言:javascript
复制
 controller.injectDialog(singleDialog)

我的整个代码都在这里,Github link。我需要一些帮助。我没有做什么或做错了什么,我不能从子组件注入。

EN

回答 2

Stack Overflow用户

发布于 2019-10-31 23:05:19

要在给定的类上使用字段注入,您需要指定具体的类型,而不是它的超类。

代码语言:javascript
复制
@UIScope
@Subcomponent(modules = [ControllerModule::class])
interface ControllerComponent {

    //fun injectActivity(activity: BaseActivity)

    //fun injectDialog(dialog: BaseDialog)

    fun inject(activity: SomeSpecificActivity)

    fun inject(activity: SomeOtherActivity)

    fun inject(dialog: SomeSpecificDialog)

    fun inject(dialog: SomeOtherDialog)
}
票数 1
EN

Stack Overflow用户

发布于 2019-10-30 03:03:52

注入是有效的,但是您没有在SingleClickDialog类中注入任何内容,请记住,inject (类:类)方法是为了让它知道该类将被注入,但是您需要将需要注入的元素放入带有注释@Inject的类中,还需要在ControllerModule中添加它的提供者

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58593064

复制
相关文章

相似问题

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