java - Dagger 2 - 提供具有自己依赖性的方法

标签 java android dependency-injection dagger-2

我正在尝试理解和实现 Dagger 2。我已经阅读了很多不同的教程和官方 documentation .我想我大体上理解了它,但我仍然无法理解一些简单的要点(虽然我写了它,但我已经找到了一些解决方案,但是..):

It's possible for @Provides methods to have dependencies of their own.

什么时候可以?

我看到有可能得到“组件包含一个依赖周期”。

谁能帮我理解可能和不可能的情况。
谢谢。

最佳答案

实际上,您可以使用限定符(@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;

关于java - Dagger 2 - 提供具有自己依赖性的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34371810/

相关文章:

java - Hibernate 和 JPA 之间有什么区别?

java - 在 Parse 中选择最多、第二多、第三...最近的用户

android - ExoPlayer 视频不裁剪和适合

c# - 如何获取在 Unity 中注入(inject)的对象的类型?

java - 如何测量宽度和高度,然后在添加 View 之前更改参数?

java - 我怎样才能编写一个方法来使这段代码可重用?

android - 如何检查 ViewModel 中授予的权限?

java - 帮助在 Android 中获取 HTML 文件

android - Dagger 2 的作用域可以比 Activity 生命周期短吗?

angularjs - 从另一个模块获取对象( Controller 、服务或指令的功能)