我们目前有3个模块:应用程序,API和核心。
应用程序依赖于API和核心。
API依赖于Core。
在我们的Core模块中,我们有一个VersionProvider:
class VersionProvider @Inject constructor(@ApplicationContext context: Context) {
val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName
val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
context.packageManager.getPackageInfo(context.packageName, 0).longVersionCode
} else {
@Suppress("DEPRECATION")
context.packageManager.getPackageInfo(context.packageName, 0).versionCode
}
}
字符串
它被注入到类中,包括API模块和App模块。
核心模块hilt模块是这样定义的:
@Module
@InstallIn(SingletonComponent::class)
abstract class CoreModule {
@Singleton
@Binds
abstract fun bindVersionProvider(
provider: VersionProvider
): VersionProvider
}
型
编译时,我们得到这个错误:
C:\Code\xxx\app\build\generated\hilt\component_sources\development\com\xxx\App_HiltComponents.java:200:error:[Dagger/DependencyCycle] Found a dependency cycle:public abstract static class SingletonC implements App_GeneratedInjector,^ com.xxx.core.VersionProvider is injected at com.xxx.core.hilt.CoreModule.bindVersionProvider(provider)com.xxx.core.VersionProvider在com.xxx.core.hilt.CoreModule.bindVersionProvider处注入(供应商).通过以下方式请求周期:在com. xxx. API.core.hilt.ApiClientModule.bindNetworkManager处注入com.xxx.core.VersionProvider(�,versionProvider)com.xxx.API.services.helpers.INetworkManager在com.xxx.API.core.hilt.ApiClientModule.bindInventoryApi处注入(networkManager)com.xxx.API.services.inventory.InventoryApi在com.xxx.API.services.inventory.InventoryService(API,)com.xxx.API.services.inventory.InventoryService在com.xxx.API.core.hilt.ServiceModule.bindInventoryService(service)注入com.xxx.API.services.inventory.IInventoryService在com.xxx.managers.inventory.InventoryManager处注入(inventoryService,�)com.xxx.managers.inventory.InventoryManager在com.xxx.core.hilt.ManagerModule.bindInventoryManager(manager)com.xxx.managers.inventory.IInventoryManager在com.xxx.App.inventoryManager com.xxx.App在com.xxx.App_GeneratedInjector.injectApp注入(com.xxx.App)以下其他入口点也依赖于它:dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap()[com.xxx. App_HiltComponents.SingletonC?com.xxx. App_HiltComponents.ActivityRetainedC?com.xxx.App_HiltComponents.ViewModelC] 1错误
在App和API模块中,以相同的方式定义Hilt模块,例如:
@Module
@InstallIn(SingletonComponent::class)
object ApiClientModule {
@Provides
@Singleton
fun bindNetworkManager(
settings: ISettings,
versionProvider: VersionProvider
): INetworkManager {
return NetworkManager(settings, versionProvider)
}
...
}
型
我认为问题与VersionProvider在Hilt容器中多次注册有关,因为它被App和API模块引用。
但我不知道我缺少什么希尔特配置,使它的工作。
有线索吗?
1条答案
按热度按时间n9vozmp41#
我认为依赖循环发生在
CoreModule
中。请尝试删除以下内容:字符串
并使用
@Singleton
注解VersionProvider
类。