2016-05-01 4 views
7

मेरे पास यह नेटवर्क मॉड्यूल है। मैं त्रुटि मॉड्यूल की स्थिर विधि में नेटवर्क मॉड्यूल इंजेक्ट करना चाहता हूं।स्थैतिक विधि में इंजेक्शन डैगर कर सकते हैं?

@Module 
public class NetworkModule { 
    private final String END_POINT = "https://www.myurl.com/"; 

    @Provides 
    @Singleton 
    public OkHttpClient getOkHttpClient() { 
      OkHttpClient okHttpClient = builder.build(); 
      return okHttpClient; 
     } 

    @Provides 
    @Singleton 
    public GsonConverterFactory getGsonConverterFactory() { 
     return GsonConverterFactory.create(); 
    } 

    @Provides 
    @Singleton 
    public Retrofit getRetrofit(OkHttpClient okHttpClient, GsonConverterFactory gsonConverterFactory) { 
     return new Retrofit.Builder() 
       .baseUrl(END_POINT) 
       .client(okHttpClient) 
       .addConverterFactory(gsonConverterFactory) 
       .build(); 
    } 

    @Provides 
    @Singleton 
    public RetrofitService getRetrofitService(Retrofit retrofit) { 
     return retrofit.create(RetrofitService.class); 
    } 

और मैं के रूप में स्थिर विधि में इस मॉड्यूल इंजेक्षन करना चाहते हैं:

public class ErrorUtils { 
    @Inject 
    static Retrofit retrofit; 

    public static RestError parseError(Response<?> response) { 

     **//showing error while writing this line** 

     MyApplication.getComponent().inject(ErrorUtils.class); 
     Converter<ResponseBody, RestError> converter = retrofit.responseBodyConverter(RestError.class, new Annotation[0]); 

     RestError error; 

     try { 
      error = converter.convert(response.errorBody()); 
     } catch (IOException e) { 
      return new RestError(); 
     } 

     return error; 
    } 
} 

हम कैसे स्थिर विधि में मॉड्यूल इंजेक्षन कर सकते हैं, किसी भी सुझाव?

उत्तर

13

रूप Migrating from Dagger 1

में देखा जा सकता डैगर 2 समर्थन स्थिर इंजेक्शन नहीं करता है।

स्थिर तरीके और चर आम तौर पर एक बुरा विचार हैं। आपके मामले में आप केवल ErrorUtils ऑब्जेक्ट बना सकते हैं, उदा। @Singleton गुंजाइश के साथ। फिर आप सेवा को सही तरीके से इंजेक्ट कर सकते हैं और स्थिर कॉल के उपयोग के बिना अपने errorUtils को ठीक से इंजेक्ट कर सकते हैं।

अगर वह एक विकल्प नहीं है, तो आप सिर्फ एक गेटर अपने घटक

@Component interface MyComponent { 
    Retrofit getRetrofit(); 
} 

को प्रदान करते हैं और फिर है कि विधि का उपयोग अपने स्थिर चर सेट कर सकते हैं।

+0

"स्टेटिक विधियों और चर आम तौर पर एक बुरा विचार है" ... सार्वजनिक स्थैतिक मंशा के बारे में क्या है कॉलिंग इंटेंट()? –

+0

मैं वहां एक जीसन ऑब्जेक्ट तक पहुंचना चाहता हूं इसलिए मुझे विधि के अंदर एक नया उदाहरण बनाना है या सरल सिंगलटन का उपयोग स्थिर विधि getInstance() के बजाय डैगर के बजाय करना है ...? –

+0

@LeoDroidcoder स्थिर वस्तुओं (जैसे सिंगलेट्स) के साथ समस्या को ग्लोबल स्टेट कहा जाता है। यह असंभव के करीब परीक्षण कर सकता है और यदि आप कहीं से भी कुछ पढ़ और लिख सकते हैं तो आवश्यक से अधिक भ्रम पैदा कर सकते हैं। कल्पना करें कि आप अपने ऐप के 2 अलग-अलग स्थानों में 'डेट' ऑब्जेक्ट को अलग-अलग करना चाहते हैं, लेकिन उसी' जीसन' इंस्टेंस को साझा करें। हालांकि जीसन थोड़ा दुष्प्रभावों के साथ एक हानिरहित उदाहरण है। –

संबंधित मुद्दे