Как внедрить объект области действия в объект области приложения? - PullRequest
0 голосов
/ 30 марта 2020

Я создаю приложение 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()
            ;
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...