不知道标题是明确的,但我实际上已经是:Dagger2注射到子对象
模块:
@Module
public class TestUserModule {
User user;
public TestUserModule(User user) {
this.user = user;
}
@Provides
@Singleton
public User providesUser() {
return user;
}
}
组件:
@Singleton
@Component(modules = {TestUserModule.class})
public interface UserComponent {
void inject(MyActivity activity);
void inject(MyActivity2 activity);
}
在我的应用程序
我创建组件像这样:
userComponent = DaggerUserComponent.builder().testUserModule(new TestUserModule(user)).build();
因此,在我的活动中一切正常,我可以使用@Inject User user;
它工作正常。
现在在我的活动,如果我创建一个对象foo,它看起来像这样:
public class Foo {
@Inject
User user;
MyActivity activity;
public Foo(MyActivity activity){
this.activity = activity;
}
}
通过我与new Foo()
活动实例富,我知道我的用户将不会被注入。
所以我的问题是,我必须在我的代码中更新以便能够在我的活动中注入Foo对象(我认为这是如果我想在Foo中注入User但要告诉我“米错了)?
另外,哪里是构建我的组件的好地方?在应用程序中的一切??
感谢的
感谢您的回答,但是如果在Foo的构造函数中我想从我注入Foo中获得我的活动呢?我可以这样做吗? 像@Inject public Foo(MyActivity activity){} –
这听起来像循环依赖,这可能不是一个好主意。为什么不定义方法'attach(Activity act)'并在实例化一个'Foo'后调用它? – Ognyan
是的,它只是知道是否有办法避免附加(活动),但我会这样做,谢谢 –