我可以在注入完成后立即 运行 编码吗?
Can I run code after right after the injection has been completed?
我在 Dagger 2 中得到了这个简单的 class:
@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 框架有某种 event/annotation ,我可以用它在注入完成后执行代码。
我正在寻找类似的东西:
@Inject public Bus bus;
@Inject
public TwitterAppModel() {
}
@OnIjectComplete
public void onInit() {
bus.register(this);
}
这将使代码更清晰,配置中的代码更少 classes(Dagger 已经足够了),如果我想添加一个新的,这个 class 会更容易删除我想在启动时使用的@Inject 无需在 2 个地方等处进行编辑
您要查找的@OnInjectComplete 注释已经存在。它叫做@Inject!在填充@Inject 字段后,将调用任何带有@Inject 的方法。如果该方法带有参数,则将注入这些参数。
所以尝试:
@Inject public Bus bus;
@Inject
public TwitterAppModel() {
}
@Inject
public void onInit() {
bus.register(this);
}
我在 Dagger 2 中得到了这个简单的 class:
@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 框架有某种 event/annotation ,我可以用它在注入完成后执行代码。
我正在寻找类似的东西:
@Inject public Bus bus;
@Inject
public TwitterAppModel() {
}
@OnIjectComplete
public void onInit() {
bus.register(this);
}
这将使代码更清晰,配置中的代码更少 classes(Dagger 已经足够了),如果我想添加一个新的,这个 class 会更容易删除我想在启动时使用的@Inject 无需在 2 个地方等处进行编辑
您要查找的@OnInjectComplete 注释已经存在。它叫做@Inject!在填充@Inject 字段后,将调用任何带有@Inject 的方法。如果该方法带有参数,则将注入这些参数。
所以尝试:
@Inject public Bus bus;
@Inject
public TwitterAppModel() {
}
@Inject
public void onInit() {
bus.register(this);
}