【问题标题】:Hilt dependency injection, glide module inside a provided moduleHilt 依赖注入,在提供的模块内滑动模块
【发布时间】:2020-07-30 22:45:02
【问题描述】:

我是新手,我不知道我在做什么是错误的,还是因为其他原因无法正常工作,所以请多多包涵。

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

视图持有者扩展了BaseViewHolder,我要注入的类是一个依赖glide的图像助手类。

我有一个提供滑行的模块

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

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

这个模块在我的应用程序的其他地方使用,所以我知道它可以工作。

我已经用 @Inject 注释了图像帮助器构造函数,我正在尝试像这样将注入 glide 字段注入到这个类中

@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();
}
}

感谢任何帮助

【问题讨论】:

    标签: android android-glide dagger-hilt


    【解决方案1】:

    仅向字段添加 @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();
      }
    
      //...
    }
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 2011-09-22
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      相关资源
      最近更新 更多