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