Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
必须设置Dagger2 mvvm android模块_Android_Dependency Injection_Dagger 2 - Fatal编程技术网

必须设置Dagger2 mvvm android模块

必须设置Dagger2 mvvm android模块,android,dependency-injection,dagger-2,Android,Dependency Injection,Dagger 2,我有一个关于android dagger的初级问题。请查看片段以便快速掌握。 目标是通过依赖项注入在我的视图模型类中提供CentralRepo实例 比如说,我有以下依赖性类,如下所示 MyViewModel -> ctor( //initing.. mCentralRepo = CentralRepo.getInstance(RemoteRepo.getInstance) ); CentralRepo -> cror (@para RemoteRepo) 现在,这些是我的模块类

我有一个关于android dagger的初级问题。请查看片段以便快速掌握。
目标是通过依赖项注入在我的视图模型类中提供CentralRepo实例

比如说,我有以下依赖性类,如下所示

MyViewModel -> ctor( //initing.. mCentralRepo = CentralRepo.getInstance(RemoteRepo.getInstance) );

CentralRepo -> cror (@para RemoteRepo) 
现在,这些是我的模块类

  • MyRemoteRepositoyModule

    @Module  
    public class MyRemoteRepositoryModule {  
    
     /**
      * Method to provide an instance of {@link RemoteRepository}
      *
      * @return RemoteRepository.
      */
     @Singleton 
     @Provides
     RemoteRepository provideRemoteRepository() {
         return RemoteRepository.getInstance();
     }
    }
    
  • 菌丝体再生模块

     @Module  
     public class MyCentralRepositoryModule {  
     private RemoteRepository mRemoteRepository;
    
     public MyCentralRepositoryModule(RemoteRepository remoteRepository) {
         mRemoteRepository = remoteRepository;
     }
    
     /**
      * Method to provide an instance of {@link CentralRepository}
      *
      * @return MyCentralRepository.
      */
     @Singleton 
     @Provides
     MyCentralRepository provideMyCentralRepository() {
         return MyCentralRepository.getInstance(mRemoteRepository);
     }
    }
    
  • 最后是组件类(IMyComponent)

  • 和应用程序类

    public class MyApplication extends Application {
        
        private IMyComponent mComponent;
    
        @Override
        public void onCreate() {
            super.onCreate();
          
            // doubtful?
            mComponent = DaggerIMyComponent.builder().myRemoteRepositoryModule(new MyRemoteRepositoryModule()).build();
                
           //
        }
       }
    
    现在,如果我尝试将其注入到视图模型类中 我犯了个错误

    必须设置MyCentralRepositoryModule


    我确信我遗漏了一些东西,如果您能指出错误,我们将不胜感激。

    您的
    IMyComponent
    定义您将只在
    MyAndroidViewModel
    中插入这些模块,并且您正在应用程序上下文中构建您的组件。现在有两种可能性

    1-将组件方法的参数从
    MyAndroidViewModel
    更改为
    Application

      @Singleton
      @Component(modules = {
          MyRemoteRepositoryModule.class, 
          MyCentralRepositoryModule.class
      })  
      public interface IMyComponent {
          public void injectInViewModel(Application application);
      } 
    
    然后用这个街区

    DaggerIMyComponent.builder().myCentralRepositoryModule(new MyRemoteRepositoryModule()).build().injectInViewModel(this);
    
    2-或通过在类中添加以下代码,在
    MyAndroidViewModel
    中构建组件

    init{
    DaggerIMyComponent.builder().myCentralRepositoryModule(new MyRemoteRepositoryModule()).build().injectInViewModel(this);
    }
    

    这是很多你不需要的代码。您试图通过在模块中手动创建“图形”来手动解析图形,而不是只添加
    @Singleton公共类MyCentralRepository{@Inject(RemoteRepository RemoteRepository){}
    ,而不添加模块。
    init{
    DaggerIMyComponent.builder().myCentralRepositoryModule(new MyRemoteRepositoryModule()).build().injectInViewModel(this);
    }