我有一个组件,它重新组合当前活动及其片段,因为我希望范围仅适用于此活动,而不是整个应用程序。 所以在这个活动的onCreate方法中,我创建了我的Component,然后将当前的Activity注入其中(参见下面的代码)。
我想知道我所做的事情是否正确,或者是否有更好的方法可以做到这一点?
仅供参考,我遵循MVP设计模式。
组件
@Singleton
@Component(modules = {
FragmentX1Module.class,
FragmentX2Module.class,
ActivityXModule.class,
RepositoryModule.class,
})
public interface ActivityXComponent {
void inject(FragmentX1Module fragment);
void inject(FragmentX2Module fragment);
void inject(ActivityXModule activity);
}
活动
private ActivityXComponent mXComponent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_x);
mXComponent = DaggerActivityXComponent.builder()
.activityXModule(new ActivityXModule(this)) // I need the Activity Context for later uses
.build();
mXComponent.inject(this);
// ...
}
答案 0 :(得分:2)
我认为你可能希望在多个活动中注入对象,可能来自你的RepositoryModule
。因此,我建议你有一个app宽组件,如:
@Singleton
@Component(modules = {
RepositoryModule.class,
})
public interface AppComponent {
ActivityXComponent plus(ActivityXModule module);
}
然后,您应将ActivityXComponent的范围限定为@PerActivity
。
看看http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/的好例子。