从匕首2获取空实例 [英] Getting null instance from dagger 2
问题描述
我正在开发一个应用程序,其中定义了多层并使用dagger2进行实例管理等.我有管理器,服务和视图.
I am developing an app in which I have defined multiple layers and using dagger2 for instance management etc. I have managers, services and views.
我正在尝试在@Module中设置管理器,例如:
I am trying to set manager in a @Module like:
@Module
class ManagerModule {
@Provides
@Singleton
fun provideDatabaseContext(userManager: UserManager) : DatabaseContext {
var databaseContext : DatabaseContext = DatabaseContext();
databaseContext.setUserManager(userManager)
return databaseContext
}
@Provides
@Singleton
fun provideUserManager(store : PersistenceStore<DAOUser>) : UserManager = UserManager(store)
}
其中DatabaseContext是这样的:
where DatabaseContext is like this:
class DatabaseContext : IDatabaseContext {
private lateinit var userManager: IUserManager
override fun getUserManager(): IUserManager {
return userManager;
}
fun setUserManager(userManager: IUserManager){
this.userManager = userManager;
}
}
当我在服务中注入DatabaseContext时是这样的:
and when I have injected DatabaseContext in my service like this:
class UserService @Inject constructor(var databaseContext: IDatabaseContext) : IUserService {
override fun addUser(dtoUser: DTOUser, callback: ResponseCallback<Response<Void>>) {
var daoUser : DAOUser = DAOUser(dtoUser.name, dtoUser.email, dtoUser.password)
databaseContext.getUserManager().add(daoUser);
callback.onCompletion(Response<Void>())
}
}
除了getUserManager()一直为空,一切都工作正常,即使我有setUserManager方法并且正在ManagerModule中进行设置(如上所示).任何帮助,将不胜感激.谢谢
Everything is working fine except getUserManager() which is coming null all the time even though I have setUserManager method and I am setting in ManagerModule as you can see above. Any help would be appreciated. Thanks
这是ServicesModule
Here is ServicesModule
@Module
class ServicesModule {
@Provides
@Singleton
fun provideUserService() : UserService = UserService(DatabaseContext())
@Provides
@Singleton
fun provideAuthenticationService() : AuthenticationService = AuthenticationService(FirebaseAuth.getInstance())
}
推荐答案
我在ServicesModule方法中将其传递给了错误.所以我必须以这种方法传递它,然后它才能起作用:
I was passing it wrong in the method of ServicesModule. So I had to pass it in the method like this and it worked:
@Provides
@Singleton
fun provideUserService(databaseContext : DatabaseContext()) : UserService = UserService(databaseContext )
这篇关于从匕首2获取空实例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!