我正在制作一个android应用程序,并通过匕首2遵循mvvm架构。问题在于确定活动模块的Camera Preview希望将其注入Application接口DataManager范围的AppManager的范围。出现错误image.crystalapps.mytrackercamerax.ui.cameraactivity.CameraPreview如果没有@Inject构造函数或@Provides注释的方法就无法提供。 我如何从活动范围使用CameraPreview进入Datamanager界面...。
// AppComponent
@ApplicationScope
@Component(modules = {AndroidSupportInjectionModule.class , ViewModelProviderFactoryModule.class , AppModule.class , ActivitiesBuilderModule.class})
public interface AppComponent extends AndroidInjector<BaseApplication> {
void inject(BaseApplication appComponent);
@Component.Builder
interface Builder{
@BindsInstance
Builder appComponent(Application application);
AppComponent build();
}
}
//应用程序级别模块
@Module(includes = ActivitiesBuilderModule.class)
public class AppModule {
@ApplicationScope
@Provides
DataManager provideDataManager(AppDataManager appDataManager){
return appDataManager;
}
}
// ActivityBuilder
@Module
public abstract class ActivitiesBuilderModule {
@ContributesAndroidInjector(modules = {CameraViewModelModule.class ,CameraContentModule.class})
abstract CameraActivity getCameraActivity();
}
//活动模块依存关系
@Module
public class CameraContentModule {
@Provides
CameraPreview provideCamraPrevierw(Application application){
return new CameraPreview(application);}}
//在这里我想将camerapreview从活动范围传递到应用程序范围
public class AppDataManager implements DataManager{
public static final String TAG="Mytag";
private CameraPreview cameraPreview;
@Inject
public AppDataManager(CameraPreview cameraPreview ){
this.cameraPreview=cameraPreview;
Log.i(TAG, "AppDataManager: "+cameraPreview);
}
}
// BaseViewModel,其中我正在使用applicationScope DataManager
public class BaseViewModel extends ViewModel {
private DataManager appDataManager;
@Inject
public BaseViewModel(DataManager appDataManager){
this.appDataManager=appDataManager;
}
}
//应用程序类
public class BaseApplication extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return DaggerAppComponent.builder().appComponent(this).build()
;
}
}