我希望能够创建同一类的两个实例,并将它们注入不同的属性,然后将这两个对象注入到我的应用程序中的两个特定位置。
目前我的ClientModule中有一个方法。。。
@Provides
@Named("bean1")
public MainBean getMainBean() {
MainBean mainBean = new MainBean(new SecondaryBean());
return mainBean;
}
然后在我的演讲者等中,我做以下事情:
public MyPresenter(final EventBus eventBus, final MyView view,
@Named("bean1") MainBean bean, TitleSetupData data) {
super(eventBus, view);
this.bean1 = bean1;
}
而且效果很好。基于对应的@Named注释,我得到了正确的bean。
然而,这种方法有一个弱点,我需要在@Providers方法中创建并注入MainBean的所有依赖项。
例如,SecondaryBean的任何@Inject注释都不受尊重。
我可以做的一件事是将任何相关的依赖项传递到getMainBean方法中,但我想知道是否还有另一个更优雅或更好的解决方案。
有人有什么想法吗?
我遇到了同样的问题。您正在寻找的是@Assisted Inject,其中一些构造函数参数被注入,一些参数在实例化对象时作为参数传递。
你可以在这篇博客文章中找到一个完整的例子,它帮助我开始学习。