我正在尝试注入一个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;
}
}
这不是我第一次使用这种设置,但我之前从未遇到过这个问题。我忘记了什么?
答案 0 :(得分:1)
我认为你忘了void inject(That that)
只适用于具体的类,而在基类中你只注入基类中可见的内容。
如果要注入具体类,可以在基础
中指定一个抽象方法 protected abstract void injectSelf();
这样,具体的孩子就能够自己调用组件的inject
方法。