【问题标题】:How to inject Context instance into the type converter?如何将 Context 实例注入类型转换器?
【发布时间】:2018-05-03 05:30:23
【问题描述】:

我有一个类型转换器,例如:

class DateConverter {
    Context mContext;

    public DateConverter(Context context) {
        mContext = context;
    }

    @TypeConverter
    public Foobar toFoobar(String str) {
        return App.get(mContext).getComponent()
                .getFoobarManager().convert(str);
    }
}

我的问题是我不知道将上下文注入 DateConverter 实例。

PS: 该项目使用的是 dagger2,所以我更喜欢注入而不是引用静态 Context 实例。

提前致谢!

【问题讨论】:

  • 在 toFoobar 方法中用 mContext 替换上下文。
  • 您可以将 TypeConverter 与 Room 2.3.0-alpha03 中的构造函数参数一起使用。检查这个答案:stackoverflow.com/a/64973320/3901000

标签: android android-room


【解决方案1】:

将您的构造函数更改为 public DateConverter() 作为我们将通过 dagger2 添加的上下文。

如果您在项目中使用过 dagger2,则必须有任何组件类。组件基本上是应用程序中的一个接口,它允许视图通过匕首注入。例如,必须有一些名称为inject() 的方法具有不同的参数

    public abstract void inject(MainActivity activity);
    public abstract void inject(DaggerApplication daggerApplication);

为您的DateConverter 创建您自己的方法

public abstract void inject(DateConverter dateconverter);

现在在您的 DateConverter 中添加使用此注入方法,就像您在其他类中使用它的方式一样。还要在DateConverter中定义以下代码

    @Inject
    Context context;

【讨论】:

  • 好的,我们现在有一个上下文注入方法,但是调用点在哪里?
  • dagger 基本上遵循抽象,所以如果你注入你的视图,你可以简单地使用这个上下文。确保您的上下文在 AppModule 类中是可提供的。
  • 感谢您的回复,但是它不起作用,因为 DateConverter 实例是 Dao 的私有成员,并且代码由 Room 生成,不是手写
猜你喜欢
  • 1970-01-01
  • 2023-04-10
  • 2010-10-25
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多