从匕首2获取空实例 [英] Getting null instance from dagger 2

查看:82
本文介绍了从匕首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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆