मुझे http://konmik.github.io/snorkeling-with-dagger-2.html पर आधारित एक साधारण डैगर 2 परीक्षण-सेटअप मिला है। यह एक वरीयता पत्रक इंजेक्ट करता है जो सभी प्राथमिकताओं को आउटपुट करता है। इंजेक्शन कक्षा में, मैं अधिक कक्षाओं को इंजेक्ट कर सकता हूं।डैगर 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 ठीक से सेट है। तो यह उदाहरण अपेक्षा के अनुसार काम करता है। अब मैं जगह पर एक एमवीपी संरचना प्राप्त करने की कोशिश कर रहा हूं। कार्यान्वयन के साथ एक मुख्य प्रतिनिधि इंटरफ़ेस है। 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-now-the-project-d3fd553b3e21#.6y9ze7e55 –