Ho una semplice configurazione di prova di Dagger 2, basata su http://konmik.github.io/snorkeling-with-dagger-2.html. Inietta un PreferenceLogger che emette tutte le preferenze. Nella classe iniettata, posso @Inserire più classi.Dagger 2 e implementazioni di interfaccia
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
}
}
Quando eseguo questo, logger è impostato, e dentro il PreferencesLogger.log OkHttpClient è impostato correttamente. Quindi questo esempio funziona come previsto. Ora sto cercando di ottenere una struttura MVP sul posto. C'è un'interfaccia MainPresenter con un'implementazione. Nella MainActivity a impostare una:
@Inject MainPresenter presenter;
così ho potuto passare questo MainPresenter con un'alternativa (debug o test) attuazione. Ovviamente, ora ho bisogno di un modulo per specificare quale implementazione voglio utilizzare.
public interface MainPresenter {
void doStuff();
}
public class MainPresenterImpl implements MainPresenter {
@Inject OkHttpClient client;
public MainPresenterImpl() {}
@Override public void doStuff() {
// this.client is not available
}
}
@Module public class MainActivityModule {
@Provides MainPresenter provideMainPresenter() {
return new MainPresenterImpl();
}
}
Un problema ora si verifica che OkHttpClient non viene più iniettato. Ovviamente potrei alterare il modulo per accettare un parametro OkHttpClient, ma non penso che questo sia il modo consigliato di farlo. C'è una ragione per cui MainPresenterImpl non viene iniettato correttamente?
ho fatto una domanda relativa qui: http://stackoverflow.com/questions/30555285/dagger2-injecting-implementation-classes-with-component – EpicPandaForce
un'occhiata a questo progetto articolo e campione che potrebbe aiutare: https://medium.com/@m_mirhoseini/yet-another-mvp-article-part-1-lets-get-to-know-the-project-d3fd553b3e21#.6y9ze7e55 –