Changes to be made to your Android Dagger injection if you have updated to the latest 2.23.2
@ Scope
@ Retention (RetentionPolicy .CLASS )
public @interface ApplicationScope {
}
@ Module
public class SharedPreferenceModule {
@ ApplicationScope
@ Provides
SharedPreferences sharedPreferences (Application application ) {
return application .getSharedPreferences (
KeyWordsAndConstants .SHARED_PREFERENCE_DB_NAME ,
Context .MODE_PRIVATE
);
}
}
SubComponent needs to look like this -
@ LoginScope
@ Subcomponent (modules = {
LoginModule .class
})
public interface LoginSubComponent extends AndroidInjector <Login > {
@ Subcomponent .Factory
public interface Factory extends AndroidInjector .Factory <Login > {
}
}
@ Module (
subcomponents = {
SplashSubComponent .class ,
LoginSubComponent .class
}
)
public class AppModule {
}
@ Module
public abstract class LoginActivityBuilder {
@ Binds
@ IntoMap
@ SuppressWarnings ("unused" )
@ ClassKey (Login .class )
abstract AndroidInjector .Factory <?> bind (LoginSubComponent .Factory builder );
}
@ ApplicationScope
@ Component (
modules = {
AndroidInjectionModule .class ,
AppModule .class ,
NetworkModule .class ,
RepositoryModule .class ,
LogUtilModule .class ,
SharedPreferenceModule .class ,
SplashActivityBuilder .class ,
LoginActivityBuilder .class
}
)
public interface AppComponent {
@ Component .Builder
interface Builder {
@ BindsInstance
Builder application (Application application );
AppComponent build ();
}
void inject (ApplicationClass applicationClass );
}
Application Class Structure
public class ApplicationClass extends Application implements HasActivityInjector {
@ Inject
DispatchingAndroidInjector <Activity > dispatchingAndroidInjector ;
@ Override
public AndroidInjector <Activity > activityInjector () {
return dispatchingAndroidInjector ;
}
@ Override
public void onCreate () {
super .onCreate ();
DaggerAppComponent
.builder ()
.application (this )
.build ()
.inject (this );
}
}