我正在尝试在一个项目中添加Dagger 2。我已经创建了3个组件
AppComponent (the primary one)
RetrofitComponent (Dependent component works fine)
ControllerComponent (Subcomponent, not injecting properly)这是我的AppComponent
@ApplicationScope
@Component(modules = [ApplicationModule::class, PrefModule::class])
interface AppComponent {
fun inject(instance: AppInstance)
fun getAppPref(): AppPreference
fun newControllerComponent(controllerModule: ControllerModule): ControllerComponent
}这是我的ControllerComponent
@UIScope
@Subcomponent(modules = [ControllerModule::class])
interface ControllerComponent {
fun injectActivity(activity: BaseActivity)
fun injectDialog(dialog: BaseDialog)
}ControllerModule
@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时,它从未注入过
controller.injectDialog(singleDialog)我的整个代码都在这里,Github link。我需要一些帮助。我没有做什么或做错了什么,我不能从子组件注入。
发布于 2019-10-31 23:05:19
要在给定的类上使用字段注入,您需要指定具体的类型,而不是它的超类。
@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)
}发布于 2019-10-30 03:03:52
注入是有效的,但是您没有在SingleClickDialog类中注入任何内容,请记住,inject (类:类)方法是为了让它知道该类将被注入,但是您需要将需要注入的元素放入带有注释@Inject的类中,还需要在ControllerModule中添加它的提供者
https://stackoverflow.com/questions/58593064
复制相似问题