使用Dagger 2,将Activity注入其本地组件是否正确?

时间:2017-05-31 16:39:53

标签: android mvp dagger-2

我有一个组件,它重新组合当前活动及其片段,因为我希望范围仅适用于此活动,而不是整个应用程序。 所以在这个活动的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);

    // ...
}

1 个答案:

答案 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/的好例子。