android - 注入(inject)完成后可以立即运行代码吗?

标签 android dagger-2

我在 Dagger 2 中有这个简单的类:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
    bus.register(this);
}

这不起作用,因为构造函数中的 busnull。当注入(inject)完成且 bus 不为空时,我可以以某种方式拦截(例如使用注释)吗?

我尝试过的:

如果我执行以下操作,它就会起作用:

@Inject
public TwitterAppModel(Bus bus) {
    this.bus = bus;
}

在我的模块中:

@Provides
@Singleton
TwitterAppModel provideTwitterAppModel(Bus bus) {
    return new TwitterAppModel(bus);
}

我不太喜欢这个解决方案,它使重构变得更加困难,而且我不关心注入(inject)顺序。我使用的其他 IOC 框架有某种事件/注释,我可以使用它们在注入(inject)完成时执行代码。

我正在寻找类似的东西:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
}

@OnIjectComplete
public void onInit() {
    bus.register(this);
}

这将使代码更清晰,配置类中的代码更少(Dagger已经足够了),这个类会更容易删除,如果我想添加一个我想在启动时使用的新@Inject no需要在 2 个地方进行编辑等。

最佳答案

您正在查找的 @OnInjectComplete 注释已存在。它叫做@Inject!任何带有 @Inject 的方法都将在填充 @Inject 字段后调用。如果该方法需要参数,这些参数将被注入(inject)。

所以尝试一下:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
}

@Inject
public void onInit() {
    bus.register(this);
}

关于android - 注入(inject)完成后可以立即运行代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38341097/

相关文章:

java - URLConnection 低级字节计数

java - 将 Java 的 Marvin 框架与 Android 结合使用

android - 调试 Android 应用程序崩溃 - logcat 中没有信息,附加时控制台中没有信息

android - Dagger 在单独的 gradle 模块中

android - 创建要在 src/test 和 src/androidTest 之间共享的 Dagger 2 组件

android - @Component.Builder 缺少所需模块或组件的 setter [Dagger2]

android.support.v4.app.FragmentManager 不能在没有 @Provides- 或 @Produces- 注释的方法的情况下提供

dagger-2 - @CustomTestApplication 值不能用 @HiltAndroidApp 注释

Android 键盘无法关闭

java - AsyncTask 根据共享首选项中存储的时间检查当前 session