2017-05-31 36 views
2

我有一个组件重新组合当前活动及其碎片,因为我希望范围仅适用于此活动,而不适用于整个应用程序。 因此,在此活动的onCreate方法中,我创建了我的Component,并将当前的Activity注入到它中(请参阅下面的代码)。使用Dagger 2,将活动注入其本地组件是否正确?

我想知道我所做的是正确的还是有更好的方法来做到这一点?

仅供参考,我遵循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); 

    // ... 
} 

回答

2

我会假设有你想在多个活动注入,或许可以从你的RepositoryModule对象。因此,我建议你有一个应用程序组件范围如:

@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/就是一个很好的例子。

+0

但是我还需要将ActivityX注入ActivityXComponent吗? – Eselfar

+0

@Eselfar您需要在构造函数中将其提供给'ActivityXModule'。 – gjsalot