使用 Dagger2 进行内部依赖注入
Internal dependency injection using Dagger2
我想用Dagger2
假设我有以下依赖项:
- ClassA依赖classB
- ClassB依赖classC
我试图创建一个提供 B 和 C 的模块,以及一个提供 A 的组件,但是只有 B 被注入到 A 中,而 B 中对 C 的引用仍然为空。
我需要使用 dagger 实现的 classes 结构是什么?
您可以使用构造函数注入或字段注入;以及构造函数注入或模块注入。
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);
}
我想用Dagger2
假设我有以下依赖项:
- ClassA依赖classB
- ClassB依赖classC
我试图创建一个提供 B 和 C 的模块,以及一个提供 A 的组件,但是只有 B 被注入到 A 中,而 B 中对 C 的引用仍然为空。
我需要使用 dagger 实现的 classes 结构是什么?
您可以使用构造函数注入或字段注入;以及构造函数注入或模块注入。
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);
}