我可以在注射完成后立即运行代码吗?

时间:2016-07-13 01:05:53

标签: android dagger-2

我在Dagger 2中得到了这个简单的课程:

@Inject public Bus bus;

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

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

我尝试了什么:

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

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

在我的模块中:

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

我真的不喜欢这个解决方案,它使重构变得更难,而且我不关心注射顺序。我使用的其他IOC框架有一些事件/注释,我可以用它来在注入完成时执行代码。

我正在寻找类似的东西:

@Inject public Bus bus;

@Inject
public TwitterAppModel() {
}

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

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

1 个答案:

答案 0 :(得分:2)

您正在寻找的@OnInjectComplete注释已存在。它被称为@Inject!在填充@Inject字段后,将调用任何带@Inject的方法。如果方法采用参数,那么将注入这些参数。

所以试试:

rt7M_tl.a