2017-08-08 2 views
-1

Dans ProfileExtendedPresenter lorsque je place uniquement la vue (premier paramètre) dans le constructeur, cela fonctionne. Avec la deuxième energyProfileRepository je reçois l'erreur suivante:Dagger 2 second paramètre du constructeur ne peut pas être injecté lors de l'utilisation Presenter

Message d'erreur:

ProfileExtendedComponent.inject(ProfileExtendedActivity)] EnergyProfileRepository cannot be provided without an @Inject constructor or from an @Provides-annotated method. 
EnergyProfileRepository is injected at 
RepositoryModule.energyProfileRepository(energyProfileRepository) 
Repository<EnergyProfile> is injected at 
ProfileExtendedPresenter.<init>(…, energyProfileRepository) 
ProfileExtendedPresenter is injected at 
ProfileExtendedModule.presenter(presenter) 
ProfileExtendedMvp.Presenter is injected at 
ProfileExtendedActivity.presenter 
.ProfileExtendedActivity is injected at 
.ProfileExtendedComponent.inject(activity) 

Je pense qu'il a quelque chose à voir avec le présentateur. Mais la portée de l'injection est l'activité. C'est correct je pense? J'ai ajouté tous les fichiers, mais je ne sais pas si c'est trop, car je ne sais pas où le problème se produit exactement.

@Singleton 
@Component(modules = {AppModule.class, RepositoryModule.class}) 
public interface AppComponent { 
    ProfileExtendedComponent plus(ProfileExtendedModule module); 
} 

@Module 
public class AppModule { 

    @Provides 
    @AppContext 
    @Singleton 
    public Context context() { 
     return Application.getInstance(); 
    } 

    @Provides 
    @Singleton 
    public Resources resources(@AppContext Context context) { 
     return context.getResources(); 
    } 
} 


@Module 
public class ProfileExtendedModule { 

    private ProfileExtendedMvp.View view; 

    public ProfileExtendedModule(ProfileExtendedMvp.View view) { 
     this.view = view; 
    } 

    @Provides 
    public ProfileExtendedMvp.View view() { 
     return view; 
    } 

    @Provides 
    public ProfileExtendedMvp.Presenter presenter(ProfileExtendedPresenter presenter) { 
     return presenter; 
    } 
} 



@Module 
public class RepositoryModule { 

    @Provides 
    @Singleton 
    public Repository<EnergyProfile> energyProfileRepository(EnergyProfileRepository energyProfileRepository) { 
     return energyProfileRepository; 
    } 
} 



@Subcomponent(modules = {ProfileExtendedModule.class}) 
public interface ProfileExtendedComponent { 
    void inject(ProfileExtendedActivity activity); 
} 




public class ProfileExtendedActivity extends BaseActivity implements ProfileExtendedMvp.View { 

    @Inject 
    ProfileExtendedMvp.Presenter presenter; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     injectDependencies(Application.getInstance().getAppComponent()); 
     presenter.init(); 
    } 
} 


public class ProfileExtendedPresenter implements ProfileExtendedMvp.Presenter { 

    ProfileExtendedMvp.View view; 

Repository<EnergyProfile> energyProfileRepository; 

@Inject 
public ProfileExtendedPresenter(ProfileExtendedMvp.View view, Repository<EnergyProfile> energyProfileRepository) { 
    this.view = view; 
    this.energyProfileRepository = energyProfileRepository; 
} 

} 

public interface ProfileExtendedMvp { 

    interface View extends Mvp.View { 
    } 

    interface Presenter extends Mvp.Presenter { 

     void init(); 
    } 
} 

public class EnergyProfileRepository implements Repository<EnergyProfile> { 

    @Override 
    public Observable<EnergyProfile> fetch() { 
     return null; 
    } 
} 

public interface Repository<T> { 
    Observable<T> fetch(); 
} 


public class EnergyProfile implements Cacheable { 
    @Json(name = "availableType") 
    private Map<String, String> houseTypesContainer; 
} 

public interface Cacheable { 
    void setCached(); 
    boolean isCached(); 
} 
+3

double possible de [Comment puis-je corriger l'erreur Dagger 2 '... ne peut pas être fourni \ [... \]'? ] (https://stackoverflow.com/questions/44912080/how-do-i-fix-dagger-2-error-cannot-be-provided) –

+0

@DavidMedenjak cela ne ressemble pas à un doublon. Je pense que le présentateur a quelque chose à voir avec ça. –

+1

Veuillez vérifier votre code attentivement comme décrit dans la réponse. Vous n'avez pas inclus où et comment vous fournissez 'EnergyProfileRepository', ni la trace d'injection complète (les lignes après le message d'erreur). Vous liez une implémentation à l'interface, mais l'implémentation ne peut pas être fournie * sans un constructeur @Inject ou à partir d'une méthode @ Provides-annotated * –

Répondre

0

Cela doit être ajouté dans la classe EnergyProfileRepository:

@Inject 
public EnergyProfileRepository() { 
}