有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Dagger2无法在注入的类内注入字段

我试着玩dagger2,但我遇到了场注入的问题,这是我的代码

POJO课程:

// User.java
public class User {
    private String firstName, lastName;
    public User(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

我无法注入user字段的类

//BackendService.java
public class BackendService {
    @Inject
    public User user; // Not injected -> Null

    @Inject
    public BackendService() {
    }
}

用户提供程序类

// UserModule.java
@Module
public class UserModule {

    @Provides
    @Singleton
    User providesUser() {
        return new User("AA","BB");
    }
}

后端提供程序类

// 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字段没有被注入

注射在^{上正常工作


共 (1) 个答案

  1. # 1 楼答案

    删除@Provides BackendService方法

    当你打电话给new BackendService()时,你是在告诉Dagger“不要担心如何创建后端服务,我可以为你做”。这也防止Dagger调用@Inject注释的构造函数和方法,或填充@Inject注释的字段

    当您删除该方法时,Dagger将检查BackendService以了解如何实例化它本身,此时它将看到@Inject构造函数和字段,并在需要时使用它们来构造BackendService