【问题标题】:Internal dependency injection using Dagger2使用 Dagger2 进行内部依赖注入
【发布时间】:2015-08-21 17:25:35
【问题描述】:

我想用 Dagger2。

假设我有以下依赖项:

  • A 类依赖于 B 类
  • B 类依赖于 C 类

我试图创建一个提供B和C的Module,以及一个提供A的Component,但是只有B被注入到A中,B中对C的引用仍然为null。

我需要使用 dagger 实现什么类结构?

【问题讨论】:

    标签: android dependency-injection dagger-2


    【解决方案1】:

    您可以使用构造函数注入或字段注入;以及构造函数注入或模块注入。

    Constructor-@Inject 可能有问题,因为我从一开始就一直在使用模块和组件。

    @Singleton
    public class A {
        B b;
    
        @Inject
        public A(B b) {
            this.b = b;
        }
    }
    
    @Singleton
    public class B {
        C c;
    
        @Inject
        public B(C c) {
            this.c = c;
        }
    }
    
    @Singleton
    public class C {
        @Inject
        public C() {
        }
    }
    
    @Singleton
    @Component
    public interface SingletonComponent {
        void inject(MainActivity mainActivity);
    }
    

    或者

    public class A {
        private B b;
    
        public A(B b) {
            this.b = b;
        }
    }
    
    public class B {
        private C c;
    
        public B(C c) {
            this.c = c;
        }
    }
    
    public class C {
    }
    
    @Module
    public class ProviderModule {
        @Provides
        @Singleton
        public A a(B b) {
            return new A(b);
        }
    
        @Provides
        @Singleton
        public B b(C c) {
            return new B(c);
        }
    
        @Provides
        @Singleton
        public C c() {
            return new C();
        }
    }
    
    @Component(modules={ProviderModule.class})
    @Singleton
    public interface SingletonComponent {
        A a();
        B b();
        C c();
    
        void inject(MainActivity mainActivity);
    }
    

    或使用现场注入

    @Singleton
    public class A {
        @Inject
        B b;
    
        @Inject    
        public A() {
        }
    }
    
    @Singleton
    public class B {
        @Inject
        C c;
    
        public B() {
        }
    }
    
    @Singleton
    public class C {
        @Inject
        public C() {
        }
    }
    
    @Component
    @Singleton
    public interface SingletonComponent {
        A a();
        B b();
        C c();
    
        void inject(MainActivity mainActivity);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2015-06-01
      • 2016-11-16
      • 1970-01-01
      • 2015-09-26
      • 2014-01-19
      相关资源
      最近更新 更多