【问题标题】:Dagger2 can't inject field inside injected classDagger2 无法在注入的类中注入字段
【发布时间】:2017-09-29 06:25:35
【问题描述】:

我正在尝试使用 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上正常工作

【问题讨论】:

    标签: java android dependency-injection dagger-2 inject


    【解决方案1】:

    删除您的@Provides BackendService 方法。

    当您致电new BackendService() 时,您是在告诉 Dagger “不要担心如何创建 BackendService,我可以为您完成”。这也阻止了 Dagger 调用 @Inject-annotated 构造函数和方法,或填充 @Inject-annotated 字段。

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

    【讨论】:

    • 这解决了我的问题,感谢您说明问题:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2020-03-24
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多