如何将活动范围对象注入应用程序范围对象?

时间:2020-03-30 10:34:19

标签: android android-studio dagger-2 dagger

我正在制作一个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()
            ;
}

}

0 个答案:

没有答案