[英]Dagger2 can't inject field inside injected class
I was trying to playaround with dagger2 but I got problems with field injection, and here is my code. 我试图使用dagger2进行变通,但是我遇到了字段注入问题,这是我的代码。
POJO classes : POJO类:
// User.java
public class User {
private String firstName, lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
The class which I can't inject the user
field. 我无法注入
user
字段的类。
//BackendService.java
public class BackendService {
@Inject
public User user; // Not injected -> Null
@Inject
public BackendService() {
}
}
User provider class 用户提供者类
// UserModule.java
@Module
public class UserModule {
@Provides
@Singleton
User providesUser() {
return new User("AA","BB");
}
}
Backend provider class 后端提供程序类
// BackendServiceModule.java
@Module
public class BackendServiceModule {
@Provides
BackendService provideBackendService() {
return new BackendService();
}
}
And last but not least, the component 最后但并非最不重要的是,组件
// ApplicationComponent.java
@Component(modules = {UserModule.class, BackendServiceModule.class})
public interface ApplicationComponent {
BackendService provideBackendService();
void inject(ConsumerMain consumerMain);
}
The problem is that in BackendService.java
the field user
doesn't get injected. 问题在于,在
BackendService.java
中,不会注入现场user
。
Injection is working properly on BackendService
注入在
BackendService
正常工作
Delete your @Provides BackendService
method. 删除您的
@Provides BackendService
方法。
When you call new BackendService()
, you're telling Dagger "don't worry about how to create a BackendService, I can do it for you". 当您调用
new BackendService()
,您在告诉Dagger“不用担心如何创建BackendService,我可以为您做到”。 That also prevents Dagger from calling @Inject
-annotated constructors and methods, or populating @Inject
-annotated fields. 这也防止Dagger调用
@Inject
注释的构造函数和方法,或填充@Inject
注释的字段。
When you delete that method, Dagger will inspect BackendService to learn how to instantiate it itself, at which point it will see your @Inject
constructor and field and use them to construct a BackendService when needed. 当您删除该方法时,Dagger将检查BackendService来学习如何实例化它本身,这时它将看到您的
@Inject
构造函数和字段,并在需要时使用它们来构造BackendService。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.