Dagger2 无法在 injected class 内注入字段
Dagger2 can't inject field inside injected class
我正在尝试使用 dagger2,但我遇到了字段注入问题,这是我的代码。
POJO classes :
// User.java
public class User {
private String firstName, lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
我无法注入 user
字段的 class。
//BackendService.java
public class BackendService {
@Inject
public User user; // Not injected -> Null
@Inject
public BackendService() {
}
}
用户提供商class
// UserModule.java
@Module
public class UserModule {
@Provides
@Singleton
User providesUser() {
return new User("AA","BB");
}
}
后端提供商class
// BackendServiceModule.java
@Module
public class BackendServiceModule {
@Provides
BackendService provideBackendService() {
return new BackendService();
}
}
最后但同样重要的是,组件
// ApplicationComponent.java
@Component(modules = {UserModule.class, BackendServiceModule.class})
public interface ApplicationComponent {
BackendService provideBackendService();
void inject(ConsumerMain consumerMain);
}
问题是 BackendService.java
字段 user
没有被注入。
注入在 BackendService
上正常工作
删除您的 @Provides BackendService
方法。
当您调用 new BackendService()
时,您是在告诉 Dagger "don't worry about how to create a BackendService, I can do it for you"。这也可以防止 Dagger 调用 @Inject
-注释的构造函数和方法,或填充 @Inject
-注释的字段。
当您删除该方法时,Dagger 将检查 BackendService 以了解如何自行实例化它,此时它将看到您的 @Inject
构造函数和字段,并在需要时使用它们来构造 BackendService。
我正在尝试使用 dagger2,但我遇到了字段注入问题,这是我的代码。
POJO classes :
// User.java
public class User {
private String firstName, lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
我无法注入 user
字段的 class。
//BackendService.java
public class BackendService {
@Inject
public User user; // Not injected -> Null
@Inject
public BackendService() {
}
}
用户提供商class
// UserModule.java
@Module
public class UserModule {
@Provides
@Singleton
User providesUser() {
return new User("AA","BB");
}
}
后端提供商class
// BackendServiceModule.java
@Module
public class BackendServiceModule {
@Provides
BackendService provideBackendService() {
return new BackendService();
}
}
最后但同样重要的是,组件
// ApplicationComponent.java
@Component(modules = {UserModule.class, BackendServiceModule.class})
public interface ApplicationComponent {
BackendService provideBackendService();
void inject(ConsumerMain consumerMain);
}
问题是 BackendService.java
字段 user
没有被注入。
注入在 BackendService
删除您的 @Provides BackendService
方法。
当您调用 new BackendService()
时,您是在告诉 Dagger "don't worry about how to create a BackendService, I can do it for you"。这也可以防止 Dagger 调用 @Inject
-注释的构造函数和方法,或填充 @Inject
-注释的字段。
当您删除该方法时,Dagger 将检查 BackendService 以了解如何自行实例化它,此时它将看到您的 @Inject
构造函数和字段,并在需要时使用它们来构造 BackendService。