我在 Dagger 2 中有这个简单的类:
@Inject public Bus bus;
@Inject
public TwitterAppModel() {
bus.register(this);
}
这不起作用,因为构造函数中的 bus
为 null
。当注入(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/