@Inject lateinit 属性尚未初始化 Dagger2



我尝试在我的项目中使用 Dagger2。我有一个Firebase服务和一个名为SyncFactory的类,可以发出特定的请求。当我接到Firebase的电话时,我会提出我的请求。 我创建了一个管理器模块

@Module(includes = [RepositoryModule::class, NetworkModule::class, AppModule::class])
class ManagersModule {
...
@Singleton
@Provides
fun provideSyncFactory(context: Context, accountsRepository: AccountsRepository, messagesRepository: MessagesRepository) : SyncFactory {
return SyncFactory(context, accountsRepository, messagesRepository)
}
...
}

SyncFactory 类如下所示

class SyncFactory @Inject constructor(
private val context: Context,
private val accountsRepository: AccountsRepository,
private val messagesRepository: MessagesRepository
) {
fun getAccounts(){....}

我还有一个界面

@Singleton
@Component(modules = [ViewModelsModule::class, DatabaseModule::class, RepositoryModule::class, AppModule::class, NetworkModule::class, ManagersModule::class])
interface ViewModelComponent {
fun inject(viewModels: ViewModels)
fun inject(firebaseService: AppFirebase)
}

最后在我的火力基地服务中,我注入了同步工厂

class AppFirebase : FirebaseMessagingService(), SyncFactoryCallback {
@Inject
lateinit var syncFactory: SyncFactory

override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
// lateinit property syncFactory has not been initialized
syncFactory.getAccounts()
}

当我的服务被调用时,我得到一个 lateinit 属性 syncFactory 尚未初始化异常。 我做错了什么..?

解决方案是在应用程序类中实现 HasServiceInjector


class MyApplication : Application(), HasServiceInjector {
@Inject
lateinit var dispatchingAndroidInjector: DispatchingAndroidInjector<Service>

companion object {
private lateinit var instance: MyApplication
}

override fun serviceInjector(): AndroidInjector<Service> {
return dispatchingAndroidInjector
}
}

最新更新