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。