2016-08-27 7 views
0

Zum Beispiel „RepositoryImpl kann nicht ohne @Inject Konstruktor oder von einer @ Stellt annotierte Methode zur Verfügung gestellt werden“, ich habe folgende Schnittstelle:Dagger 2 Fehler:

public interface Repository { 
    Observable<Pojo> getPojos(); 
} 

und seine Umsetzung:

public class RepositoryImpl implements Repository { 

    public RepositoryImpl() { 

    } 

    @Override 
    public Observable<Pojo> getPojos() { 
     return null; 
    } 

} 

Modul:

@Module 
class AppModule { 

    public AppModule() { 

    } 

    @Provides 
    @Singleton 
    Repository provideRepositoryImpl() { 
     return new RepositoryImpl(); 
    } 

} 

Und Komponente:

@Singleton 
@Component(modules = { AppModule.class }) 
public interface AppComponent { 
    void inject(MainActivity mainActivity); 
} 

Wenn ich versuche, Projekt zu erstellen, erhalte ich Fehler in Frage Titel. Welches Problem in meinem Code?

+1

Dolch in der Anwendungsklasse injiziert wird normalerweise wo ist dein inject für die Anwendungsklasse? –

Antwort

0

Die Art und Weise, wie ich Dolch 2 einrichte, ist in meinen Projekten Anwendung Ich füge die Injektionskomponente hinzu. so.

public class NyApplication extends Application { 

InjectionComponent component; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    setDagger(); 
} 

private void setDagger() { 
    component = DaggerAppComponent.builder() 
      .appComponent(new AppModule()) 
      .build(); 
    component.inject(this); 
} 

public InjectionComponent getComponent() { 
    return component; 
}} 

und dann int meine Aktivität, was auch immer es ist. Ich spritze auf, es ist onCreate so.

public class MainActivity extends Activity { 

@Inject 
Object object; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ((MyApplication) getApplication()).getComponent().inject(this); 

}} 

Ich hoffe, das hilft Ihnen.

1

Lesen Sie Ihre Fehler aufmerksam (Hervorhebung von mir):

Dagger 2 error: “RepositoryImpl cannot be provided without an @Inject constructor or from an @Provides-annotated method”

Im Allgemeinen bedeutet dies, Sie @Inject RepositoryImpl versucht haben, nicht @Inject Repository. Dies ist besonders wichtig, da Ihr Modul den RepositoryImpl-Konstruktor direkt aufruft, anstatt dass Dolk Ihre RepositoryImpl mit einem @Inject -konstruierten Konstruktor erstellen muss. (Wenn Sie hatte, konnte man RepositoryImpl einen Parameter Ihrer @Provides Methode machen oder zu einem @Binds Methode wechseln, und Sie haben Ihre Wahl zwischen der Schnittstelle gegenüber der Implementierung zu injizieren.)

Verwandte Themen