插入依赖项,在提供的模块内提供glide模块

时间:2020-07-30 22:45:02

标签: android android-glide dagger-hilt

我是不熟悉剑柄和匕首的人,不知道我在做什么是错误的还是由于其他原因而不起作用,请多多包涵。

我想将依赖于另一个类的类注入视图持有者类。

视图持有者扩展了BaseViewHolder,我想注入到其中的类是一个依赖于滑行的图像助手类。

我有一个提供滑行的模块

@Module
@InstallIn(ApplicationComponent.class)
public class GlideModule {

    @Provides
    public static RequestManager provideGlideRequestManager(@ApplicationContext Context context) {
        return Glide.with(context);
    }
}

此模块在我的应用中的其他地方使用,因此我知道它可以工作。

我已经用@Inject注释了图像助手构造器,并且我试图像这样将滑行注入到此类中

@Inject
public RequestManager glide;

@Inject
public ImageHelper() {
}

然后在我的视图持有人中,我用@Inject注释了图像助手

@Inject
public ImageHelper imageHelper;

public SentenceViewHolder(View view, ItemTouchListener onItemTouchListener, OnStartDragListener mDragStartListener) {
    super(view);
    this.v = view;
    findViewIds(onItemTouchListener, mDragStartListener);
}

在我的findViewIds方法内,我尝试访问图像助手,但其值为空,

所以我试图为它构建一个模块

@Module
@InstallIn(ActivityComponent.class)
public class ImageHelperModule {

@Singleton
@Provides
public ImageHelper provideImageHelper() {
    return new ImageHelper();
}
}

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

仅向字段添加@Inject注释不足以让Hilt提供它。您还需要定义EntryPoint(以某种方式)。

  1. 简化您的ImageHelper(无需现场注入)。是Singleton吗?
@Singleton
class ImageHelper {
  public RequestManager glide;

  @Inject
  public ImageHelper(RequestManager glide) {
    this.glide = glide;
  }

  //...
}
  1. 为您EntryPoint创建一个ViewHolder,并在ViewHolder's构造函数中使用它
public class SentenceViewHolder extends ViewHolder {

  @EntryPoint
  @InstallIn(ViewComponent.class)
  interface SentenceViewHolderEntryPoint {
    public ImageHelper imageHelper();
  }

  private ImageHelper imageHelper;  
  
  public SentenceViewHolder(View view, ItemTouchListener onItemTouchListener, OnStartDragListener mDragStartListener) {
    super(view);
    resolveDependency(view);
    this.v = view;
    findViewIds(onItemTouchListener, mDragStartListener);
  }

  private void resolveDependency(View view) {
    SentenceViewHolderEntryPoint hiltEntryPoint = EntryPointAccessors.fromView(view, SentenceViewHolderEntryPoint.class);
    imageHelper = hiltEntryPoint.imageHelper();
  }

  //...
}