Dagger 2 - 提供拥有自己依赖关系的方法

时间:2015-12-19 14:25:25

标签: java android dependency-injection dagger-2

我试图理解并实施Dagger 2.我已经阅读了很多不同的教程和官方documentation。我想我一般都理解它,但我仍然无法理解一些简单的观点(我写的时候我已经找到了解决方案但是......):

  

@Provides方法可能具有自己的依赖关系。

什么时候可能?

我认为可以获得"组件包含一个依赖循环"。

有人可以帮助我在可能的情况下及在不可能的情况下理解案件 感谢。

1 个答案:

答案 0 :(得分:3)

实际上,您可以使用限定符(@Named("something")注释)来获取给定依赖项的多种不同类型的实现。

 @Singleton 
 @Component(modules = ApplicationModule.class)
 public interface ApplicationComponent {
     void inject(BaseActivity baseActivity);

     @Named("first")
     BaseNavigator firstNavigator();
     @Named("second")
     BaseNavigator secondNavigator();

     Context context();
     //...
 }

@Module
public class ApplicationModule {
    private final AndroidApplication application;

    public ApplicationModule(AndroidApplication application) {
        this.application = application;
    }

    @Provides
    @Singleton
    @Named("first")
    BaseNavigator provideFirstNavigator() {
        return new SomeNavigator();
    }

    @Provides
    @Singleton
    @Named("second")
    BaseNavigator provideSecondNavigator() {
        return new OtherNavigator();
    }

    @Provides
    Context provideApplicationContext() {
        return this.application;
    }

}

public abstract class BaseActivity extends Activity {

    @Inject
    @Named("second")
    BaseNavigator navigator;