Ich habe ein einfaches Dagger 2 Test-Setup, basierend auf http://konmik.github.io/snorkeling-with-dagger-2.html. Es injiziert einen PreferenceLogger, der alle Einstellungen ausgibt. In der injizierten Klasse kann ich @ weitere Klassen einlesen.Dolch 2 und Schnittstellenimplementierungen
public class MainActivity extends Activity {
@Inject PreferencesLogger logger;
@Inject MainPresenter presenter;
@Override protected void onCreate(Bundle savedInstanceState) {
MyApplication.getComponent().inject(this);
presenter.doStuff();
logger.log(this);
}
}
public class PreferencesLogger {
@Inject OkHttpClient client;
@Inject public PreferencesLogger() {}
public void log(Contect context) {
// this.client is available
}
}
Als ich dies ausführen, wird Logger gesetzt, und im Inneren PreferencesLogger.log wird der OkHttpClient richtig eingestellt ist. So funktioniert dieses Beispiel wie erwartet. Jetzt versuche ich, eine MVP-Struktur an Ort und Stelle zu bekommen. Es gibt eine MainPresenter-Schnittstelle mit einer Implementierung. Im MainActivity stelle ich ein:
@Inject MainPresenter presenter;
so konnte ich diese MainPresenter mit einem alternativen Schalter (Debug oder Test) Implementierung. Natürlich brauche ich jetzt ein Modul, um festzulegen, welche Implementierung ich verwenden möchte.
Ein Problem tritt jetzt auf, dass der OkHttpClient nicht mehr injiziert wird. Natürlich könnte ich das Modul ändern, um einen Parameter OkHttpClient zu akzeptieren, aber ich denke nicht, dass dies der vorgeschlagene Weg ist. Gibt es einen Grund, warum der MainPresenterImpl nicht korrekt inject?
fragte ich eine ähnliche Frage hier: http://stackoverflow.com/questions/30555285/dagger2-injecting-implementation-classes-with-component – EpicPandaForce
in diesem Artikel und Beispielprojekt einen Blick darauf werfen, die helfen können: https://medium.com/@m_mirhoseini/yet-another-mvp-article-part-1-lets-get-to-know-the-project-d3fd553b3e21#.6y9ze7e55 –