我正在开发一个应用程序,其中定义了多层并使用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获取空实例
发布评论