Ove*_*ass 1 java android dependency-injection kotlin dagger-2
我使用的是 dagger 2.24,没有 dagger-android。我的组件设置如下:
@Singleton
@Component(modules = [
FirebaseModule::class,
ViewModelFactoryModule::class,
DispatcherModule::class,
NetworkModule::class
])
interface AppComponent {
fun getSignInComponent(): SignInComponent
fun getMapComponent(): MapComponent
// some other subcomponent creation methods
fun getNewMeetingComponent(): NewMeetingComponent // THIS method is not implemented by DaggerAppComponent
@Component.Factory
interface Factory {
fun create(
@BindsInstance context: Context
// some other dependencies
): AppComponent
}
}
/////////////////////////////////////////////////////////////////////
@ViewScope
@Subcomponent(modules = [NewMeetingModule::class])
interface NewMeetingComponent {
fun inject(newMeetingActivity: NewMeetingActivity)
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是 dagger 生成所有子组件创建方法,如下所示:
@Override
public SignInComponent getSignInComponent() {
return new SignInComponentImpl();
}
Run Code Online (Sandbox Code Playgroud)
但根本不生成任何实现fun getNewMeetingComponent(): NewMeetingComponent。这确实很奇怪,因为其他子组件之间没有概念上的差异。
构建失败并显示一条简单消息
@Singleton
@Component(modules = [
FirebaseModule::class,
ViewModelFactoryModule::class,
DispatcherModule::class,
NetworkModule::class
])
interface AppComponent {
fun getSignInComponent(): SignInComponent
fun getMapComponent(): MapComponent
// some other subcomponent creation methods
fun getNewMeetingComponent(): NewMeetingComponent // THIS method is not implemented by DaggerAppComponent
@Component.Factory
interface Factory {
fun create(
@BindsInstance context: Context
// some other dependencies
): AppComponent
}
}
/////////////////////////////////////////////////////////////////////
@ViewScope
@Subcomponent(modules = [NewMeetingModule::class])
interface NewMeetingComponent {
fun inject(newMeetingActivity: NewMeetingActivity)
}
Run Code Online (Sandbox Code Playgroud)
使用--stacktrace选项运行会产生以下堆栈跟踪:
@Override
public SignInComponent getSignInComponent() {
return new SignInComponentImpl();
}
Run Code Online (Sandbox Code Playgroud)
这里可能有什么问题?
答案很简单。我把它NewMeetingComponent放入一个名为“new”的包中。我忘记了,就 java 而言,它不是一个有效的包名称。要么 Android Studio 没有显示警告,要么我出于某种原因放弃了它。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |