要注入的依赖项为空

时间:2016-06-11 18:34:32

标签: android dependency-injection dagger-2

我正在尝试注入一个Activity的属性,但它只是设置为null,我无法找到原因。

@Inject
AuthenticationViewDispatcher mAuthenticationViewDispatcher;

--------

public class AuthenticationViewDispatcher {

    @Inject
    public AuthenticationViewDispatcher() {
    }

}

----

@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent extends AbstractComponent {

    Context context();
}

----

@Module
public class ApplicationModule {

private final Application mApplication;

public ApplicationModule(final @NonNull Application application) {
    this.mApplication = application;
}

@Provides
@Singleton
Context provideApplicationContext() {
    return this.mApplication;
}

----

@Singleton
@Component(modules = DataModule.class)
public interface DataComponent {
}

----

@PerActivity
@Component(dependencies = {ApplicationComponent.class}, modules = {LoginModule.class})
public interface LoginComponent extends ApplicationComponent {

    void inject(final InjectedActivity baseActivity);
}

----
@Module
public class LoginModule {

    @Provides
    @Singleton
    AuthenticationFlowDispatcher provideAuthenticationViewDispatcher(final @NonNull AuthenticationFlowDispatcher authenticationViewDispatcher) {
        return authenticationViewDispatcher;
    }
}

这不是我第一次使用这种设置,但我之前从未遇到过这个问题。我忘记了什么?

1 个答案:

答案 0 :(得分:1)

我认为你忘了void inject(That that)只适用于具体的类,而在基类中你只注入基类中可见的内容。

如果要注入具体类,可以在基础

中指定一个抽象方法

protected abstract void injectSelf();

这样,具体的孩子就能够自己调用组件的inject方法。