2016-06-11 39 views
0

我想注入一個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

'void inject(That that)'只適用於具體的類,而在基類中,只注入基類中可見的內容。 – EpicPandaForce

+0

我總是忘記Dagger並不以我喜歡的方式繼承。再次感謝。隨意將您的評論移至答案,以便我可以接受它:) –

回答

1

我想你忘記void inject(That that)只適用於具體的類,而在基類中,你只注入基類中可見的東西。

如果要注入的具體類,例如,您可以在基礎

protected abstract void injectSelf();

這樣具體的孩子將能夠在其自身調用組件的inject方法指定的抽象方法。