待注入依赖为空
To-be-injected dependency is null
我正在尝试注入 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;
}
}
这不是我第一次使用这种设置,但我以前从未遇到过这个问题。我忘记了什么?
我认为您忘记了 void inject(That that)
仅适用于具体的 classes,而在基础 class 中您仅注入基础 class 中可见的内容。
如果你想注入具体的classes,你可以在基础
中指定一个抽象方法
protected abstract void injectSelf();
这样具体的 child 就可以调用组件的 inject
方法。
我正在尝试注入 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;
}
}
这不是我第一次使用这种设置,但我以前从未遇到过这个问题。我忘记了什么?
我认为您忘记了 void inject(That that)
仅适用于具体的 classes,而在基础 class 中您仅注入基础 class 中可见的内容。
如果你想注入具体的classes,你可以在基础
中指定一个抽象方法protected abstract void injectSelf();
这样具体的 child 就可以调用组件的 inject
方法。