Mam prosty zestaw testowy Dagger 2, oparty na http://konmik.github.io/snorkeling-with-dagger-2.html. To wstrzykuje PreferenceLogger, który wyprowadza wszystkie preferencje. W klasie iniekcyjnej mogę dodać więcej zajęć.Implementacja Dagger 2 i interfejsu
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
}
}
Kiedy uruchomić tego rejestratora jest ustawiony, a wewnątrz PreferencesLogger.log OkHttpClient jest prawidłowo ustawiony. Ten przykład działa zgodnie z oczekiwaniami. Teraz próbuję uzyskać strukturę MVP. Istnieje interfejs MainPresenter z implementacją. W MainActivity ustawiłem:
@Inject MainPresenter presenter;
, więc mogłem zmienić tę MainPresenter na alternatywną (debugową lub testową) implementację. Oczywiście, teraz potrzebuję modułu, aby określić, jakiej implementacji chcę użyć.
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();
}
}
Problem pojawia się teraz, że OkHttpClient nie wstrzykuje już. Oczywiście mogę zmienić moduł, aby zaakceptować parametr OkHttpClient, ale nie sądzę, że jest to sugerowany sposób na zrobienie tego. Czy istnieje powód, dla którego MainPresenterImpl nie wstrzykuje się prawidłowo?
zapytałem powiązane pytanie tutaj: http://stackoverflow.com/questions/30555285/dagger2-injecting-implementation-classes-with-component – EpicPandaForce
spojrzeć na ten artykuł i przykładowy projekt, który może pomóc: https://medium.com/@m_mirhoseini/yet-another-mvp-article-part-1-lets-get-t--n--project-d3fd553b3e21#.6y9ze7e55 –