2017-09-25 4 views
0

J'utilise démo dagger2 par https://medium.com/@iammert/new-android-injector-with-dagger-2-part-1-8baa60152abe. J'ai ajouté à mon SharedPreferences AppModule.javaAndroid Dagger2 2.11 liaisons de portée de référence Appcomponent non délimitées

@Module(subcomponents = { 
    MainActivityComponent.class, 
    DetailActivityComponent.class, 
    Detail2ActivityComponent.class}) 
public class AppModule { 

@Provides 
@Singleton 
Context provideContext(Application application) { 
    return application; 
    } 

@Provides 
@Singleton //if i remove dagger works right 
SharedPreferences providesSharedPreferences(Application application) { 
    return PreferenceManager.getDefaultSharedPreferences(application); 
    } 

} 

injecter SharedPreferences dans MainActivity. Après la reconstruction du projet, j'obtiens l'erreur

enter image description here Si je supprime l'annotation @Singleton par providesSharedPreferences, reconstruire le projet à droite. Pourquoi le problème est-il annoté @Singleton par providesSharedPreferences?

Répondre

2

Vous devez ajouter @Singleton à la classe AppComponent:

@Singleton // <---- Add this line 
@Component(modules = { 
    AndroidInjectionModule.class, 
    AppModule.class, 
    ActivityBuilder.class}) 
public interface AppComponent { 

@Component.Builder 
interface Builder { 
    @BindsInstance Builder application(Application application); 
    AppComponent build(); 
} 

void inject(AndroidSampleApp app); 

}