我尝试使用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

注入在BackendService上正常工作

最佳答案

删除您的@Provides BackendService方法。

当您呼叫new BackendService()时,您是在告诉Dagger“不用担心如何创建BackendService,我可以为您做到”。这也可以防止Dagger调用带@Inject注释的构造函数和方法,或填充带@Inject注释的字段。

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

10-04 10:05