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
。这是不可能的。您不能添加与您尝试实例化的类相同的依赖项。感谢您的努力。