安卓 hilt中的java依赖循环
我是个新手,我想在Android应用程序中使用它。问题是,在构建过程中,我得到了一个依赖循环,我不确定如何解决这个问题
基本思想是我有一个本地数据库,我想把它注入到活动中。我有一个活动,它定义了一个工具栏,本地数据库是由工具栏触发的操作所必需的,然后我有一个活动扩展了这个活动,我在其中注入了其他东西
以下是一些代码作为示例:
@Singleton
public class LocalDatabase{
...
}
@Module
@InstallIn(SingletonComponent.class)
public abstract class LocalDatabaseModule {
@Singleton
@Binds
public abstract LocalDatabase bindLocalDatabaseService(LocalDatabase localDatabase);
}
@AndroidEntryPoint
public abstract class ToolbarActivity extends AppCompatActivity {
@Inject
LocalDatabase localdb;
...
}
@AndroidEntryPoint
public class LoginActivity extends ToolbarActivity {
@Inject
LoginService login;
...
}
遗憾的是,活动层次结构尚未由我决定,因此我无法修改它(其他活动必须扩展ToolbarActivity)
我得到的错误是:
public abstract static class SingletonC implements HiltApplication_GeneratedInjector,
^
app.database.local.LocalDatabase is injected at
app.hilt.LocalDatabaseModule.bindLocalDatabaseService(localDatabase)
app.database.local.LocalDatabase is injected at
app.ToolbarActivity.localdb
app.LoginActivity is injected at
app.ScrollingActivity_GeneratedInjector.injectScrollingActivity(app.ScrollingActivity)[app.hilt.HiltApplication_HiltComponents.SingletonC ? app.hilt.HiltApplication_HiltComponents.ActivityRetainedC ? app.hilt.HiltApplication_HiltComponents.ActivityC]
我真的很难理解周期在哪里,因此,我不知道如何避免这个问题。在引入本地DB代码之前,其他注入工作正常
# 1 楼答案
通过为本地数据库创建接口并使用该类进行依赖项注入,解决了这些问题。我不知道为什么我没有这样做,因为这就是我在其他注入类中所做的
# 2 楼答案
Hilt需要localDatabase来创建bindLocalDatabaseService。 我希望下面的代码将工作