我有一個簡單的Dagger 2測試設置,基於http://konmik.github.io/snorkeling-with-dagger-2.html。 它注入一個PreferenceLogger,輸出所有首選項。在注入的類中,我可以@Inject更多的類。匕首2和界面實現
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
}
}
當我運行這個,記錄器被設置,並在PreferencesLogger.log內OkHttpClient被正確設置。 因此,此示例按預期工作。 現在我正在嘗試獲得MVP結構。 有一個MainPresenter接口和一個實現。在MainActivity中,我設置了一個:
@Inject MainPresenter presenter;
所以我可以使用替代(調試或測試)實現切換此MainPresenter。當然,現在我需要一個模塊來指定我想要使用的實現。
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();
}
}
現在出現OkHttpClient不再被注入的問題。當然,我可以改變模塊接受參數OkHttpClient,但我不認爲這是建議的方式來做到這一點。 MainPresenterImpl無法正確注入的原因是什麼?
我在這裏提出一個相關的問題:http://stackoverflow.com/questions/30555285/dagger2-injecting-implementation-classes-with-component – EpicPandaForce
看看這篇文章和示例項目,該項目可能會有所幫助: https://medium.com/@m_mirhoseini/yet-another-mvp-article-part-1-lets-get-to-know-the-project-d3fd553b3e21#.6y9ze7e55 –