Android 错误:找到依赖项循环
我正在尝试注入Android 错误:找到依赖项循环,android,dependency-injection,dagger-2,Android,Dependency Injection,Dagger 2,我正在尝试注入ItemRepository,它依赖于RemoteDataSource和LocalDataSource。 我花了很多时间来解决这个问题,但运气不好 Error:(26, 10) error: Found a dependency cycle: com.project.bishoy.lost.data.ItemsRepository is injected at com.project.bishoy.lost.di.modules.ApplicationModule.provide
ItemRepository
,它依赖于RemoteDataSource
和LocalDataSource
。
我花了很多时间来解决这个问题,但运气不好
Error:(26, 10) error: Found a dependency cycle:
com.project.bishoy.lost.data.ItemsRepository is injected at
com.project.bishoy.lost.di.modules.ApplicationModule.provideItemsRepository(itemsRepository)
com.project.bishoy.lost.data.ItemsRepository is injected at
com.project.bishoy.lost.LostApp.mItemsRepository
com.project.bishoy.lost.LostApp is injected at
com.project.bishoy.lost.di.components.ApplicationComponent.inject(lostApp)
Error:(34, 21) error: Found a dependency cycle:
com.project.bishoy.lost.data.local.LocalDataSource is injected at
com.project.bishoy.lost.di.modules.ApplicationModule.provideLocalDataSource(localDataSource)
com.project.bishoy.lost.data.local.LocalDataSource is provided at
com.project.bishoy.lost.di.components.ApplicationComponent.getLocalDataSource()
Error:(36, 22) error: Found a dependency cycle:
com.project.bishoy.lost.data.remote.RemoteDataSource is injected at
com.project.bishoy.lost.di.modules.ApplicationModule.provideRemoteDataSource(remoteDataSource)
com.project.bishoy.lost.data.remote.RemoteDataSource is provided at
com.project.bishoy.lost.di.components.ApplicationComponent.getRemoteDataSource()
Error:(38, 21) error: Found a dependency cycle:
com.project.bishoy.lost.data.ItemsRepository is injected at
com.project.bishoy.lost.di.modules.ApplicationModule.provideItemsRepository(itemsRepository)
com.project.bishoy.lost.data.ItemsRepository is provided at
com.project.bishoy.lost.di.components.ApplicationComponent.getDataManager()
ApplicationModule.java
@Module
public class ApplicationModule {
private final Application mApplication;
public ApplicationModule(Application app) {
mApplication = app;
}
@Provides
@ApplicationContext
Context provideContext() {
return mApplication;
}
@Provides
Application provideApplication() {
return mApplication;
}
@Provides
@Singleton
RemoteDataSource provideRemoteDataSource(RemoteDataSource remoteDataSource) {
return remoteDataSource;
}
@Provides
@Singleton
LocalDataSource provideLocalDataSource(LocalDataSource localDataSource) {
return localDataSource;
}
@Singleton
@Provides
ItemsRepository provideItemsRepository(ItemsRepository itemsRepository) {
return itemsRepository;
}
}
@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(LostApp lostApp);
Application getApplication();
@ApplicationContext
Context getContext();
LocalDataSource getLocalDataSource();
RemoteDataSource getRemoteDataSource();
ItemsRepository getDataManager();
}
ApplicationComponent.java
@Module
public class ApplicationModule {
private final Application mApplication;
public ApplicationModule(Application app) {
mApplication = app;
}
@Provides
@ApplicationContext
Context provideContext() {
return mApplication;
}
@Provides
Application provideApplication() {
return mApplication;
}
@Provides
@Singleton
RemoteDataSource provideRemoteDataSource(RemoteDataSource remoteDataSource) {
return remoteDataSource;
}
@Provides
@Singleton
LocalDataSource provideLocalDataSource(LocalDataSource localDataSource) {
return localDataSource;
}
@Singleton
@Provides
ItemsRepository provideItemsRepository(ItemsRepository itemsRepository) {
return itemsRepository;
}
}
@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {
void inject(LostApp lostApp);
Application getApplication();
@ApplicationContext
Context getContext();
LocalDataSource getLocalDataSource();
RemoteDataSource getRemoteDataSource();
ItemsRepository getDataManager();
}
假设在
RemoteDataSource.java
和LocalDataSource.java
上有一个简单的构造函数,没有参数,并且在ItemRepository.java
中有一个同时接收本地和远程数据源的构造函数,那么您的代码如下所示:
@Module
public class ApplicationModule {
private final Application mApplication;
public ApplicationModule(Application app) {
mApplication = app;
}
@Provides
@ApplicationContext
Context provideContext() {
return mApplication;
}
@Provides
Application provideApplication() {
return mApplication;
}
@Provides
@Singleton
RemoteDataSource provideRemoteDataSource() {
return new RemoteDataSource();
}
@Provides
@Singleton
LocalDataSource provideLocalDataSource() {
return new LocalDataSource();
}
@Singleton
@Provides
ItemsRepository provideItemsRepository(LocalDataSource localDataSource, RemoteDataSource remoteDataSource) {
return new ItemsRepository(localDataSource, remoteDataSource);
}
}
您正在尝试向
LocalDataSource
提供LocalDataSource
。这是不可能的。您不能添加与您尝试实例化的类相同的依赖项。感谢您的努力。