Dagger2 注入 child object
Dagger2 injection into child object
不确定标题是否清楚,但我实际拥有的是:
模块:
@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();
所以,在我的 activity 中一切正常,我可以使用 @Inject User user;
它工作正常。
现在在我的 Activity 中,如果我创建一个 Object Foo,它看起来像这样:
public class Foo {
@Inject
User user;
MyActivity activity;
public Foo(MyActivity activity){
this.activity = activity;
}
}
通过使用 new Foo()
在我的 activity 中实例化 Foo,我知道我的用户不会被注入。
所以我的问题是,我必须在我的代码中更新什么才能在我的 activity 中注入 Foo object(如果我想注入,我认为这是方法Foo 中的用户,但如果我错了请告诉我)?
此外,哪里是构建我的组件的好地方?应用程序中的所有内容 ??
谢谢
您有 4 个选择:
1.使用:
@Inject
Foo mFoo;
如果 foo 的生命周期与 activity 的生命周期完全相同,请使用此方法。
2。使用 Lazy
:
@Inject
Lazy<Foo> mLazyFoo;
然后当你需要 Foo
:
的实例时
Foo myFoo = mLazyFoo.get();
如果在 activity.
的整个生命周期中只需要一个 Foo,请使用此方法
3。使用 Provider
@Inject
Provider<Foo> mFooProvider;
并且当你需要实例时 Foo
Foo myFooFirstInstance = mFooProvider.get();
如果 activity.
中需要多个 Foo
实例,请使用此方法
4。手动注入 foo(不推荐):
在您的 UserComponent
中声明 void inject(Foo foo)
然后在您的方法中:
Foo myFoo = new Foo(...);
userComponent.inject(myFoo);
Also, where is a good place to build my component ? Everything in the
App ??
对于android应用程序:是的,通常组件是在那里构建的。
不确定标题是否清楚,但我实际拥有的是:
模块:
@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();
所以,在我的 activity 中一切正常,我可以使用 @Inject User user;
它工作正常。
现在在我的 Activity 中,如果我创建一个 Object Foo,它看起来像这样:
public class Foo {
@Inject
User user;
MyActivity activity;
public Foo(MyActivity activity){
this.activity = activity;
}
}
通过使用 new Foo()
在我的 activity 中实例化 Foo,我知道我的用户不会被注入。
所以我的问题是,我必须在我的代码中更新什么才能在我的 activity 中注入 Foo object(如果我想注入,我认为这是方法Foo 中的用户,但如果我错了请告诉我)?
此外,哪里是构建我的组件的好地方?应用程序中的所有内容 ??
谢谢
您有 4 个选择:
1.使用:
@Inject
Foo mFoo;
如果 foo 的生命周期与 activity 的生命周期完全相同,请使用此方法。
2。使用 Lazy
:
@Inject
Lazy<Foo> mLazyFoo;
然后当你需要 Foo
:
Foo myFoo = mLazyFoo.get();
如果在 activity.
的整个生命周期中只需要一个 Foo,请使用此方法3。使用 Provider
@Inject
Provider<Foo> mFooProvider;
并且当你需要实例时 Foo
Foo myFooFirstInstance = mFooProvider.get();
如果 activity.
中需要多个Foo
实例,请使用此方法
4。手动注入 foo(不推荐):
在您的 UserComponent
中声明 void inject(Foo foo)
然后在您的方法中:
Foo myFoo = new Foo(...);
userComponent.inject(myFoo);
Also, where is a good place to build my component ? Everything in the App ??
对于android应用程序:是的,通常组件是在那里构建的。