Dagger2不能在注入的类内注入场

时间:2017-05-01 20:15:00

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

我试图用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

上正常工作

1 个答案:

答案 0 :(得分:4)

删除@Provides BackendService方法。

当您致电new BackendService()时,您告诉Dagger"不要担心如何创建BackendService,我可以为您做到这一点"。这也可以防止Dagger调用@Inject - 带注释的构造函数和方法,或者填充@Inject - 带注释的字段。

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