Я создаю приложение android и следую архитектуре mvvm через кинжал 2. Проблема заключается в определении области, в которой предварительный просмотр камеры из модуля активности хочет внедрить его в AppManager интерфейса приложения DataManager. получение ошибки 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 из области действия в приложение scope
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()
;
}
}