gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 09:45:16 27 4
gpt4 key购买 nike

我在 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 否,这个类将更容易删除需要在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com