मैंने अभी-अभी Guice के साथ खेलना शुरू किया है, और एक उपयोग-मामला जिसके बारे में मैं सोच सकता हूं, वह यह है कि एक परीक्षण में मैं सिर्फ एक बंधन को ओवरराइड करना चाहता हूं। मुझे लगता है कि मैं उत्पादन स्तर के बाकी हिस्सों का उपयोग करना चाहता हूं ताकि यह सुनिश्चित हो सके कि सब कुछ सही ढंग से सेट हो और दोहराव से बचा जा सके।
तो कल्पना कीजिए कि मेरे पास निम्नलिखित मॉड्यूल हैं
public class ProductionModule implements Module {
public void configure(Binder binder) {
binder.bind(InterfaceA.class).to(ConcreteA.class);
binder.bind(InterfaceB.class).to(ConcreteB.class);
binder.bind(InterfaceC.class).to(ConcreteC.class);
}
}
और मेरे परीक्षण में मैं केवल इंटरफ़ेस को ओवरराइड करना चाहता हूं, जबकि इंटरफ़ेसए और इंटरफ़ेसबी को चातुर्य में रखते हुए, इसलिए मैं कुछ ऐसा चाहूंगा:
Module testModule = new Module() {
public void configure(Binder binder) {
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(new ProductionModule(), testModule);
मैंने निम्नलिखित को भी आज़माया है, बिना किसी भाग्य के:
Module testModule = new ProductionModule() {
public void configure(Binder binder) {
super.configure(binder);
binder.bind(InterfaceC.class).to(MockC.class);
}
};
Guice.createInjector(testModule);
किसी को पता है कि क्या यह संभव है कि मैं क्या चाहता हूँ या मैं पूरी तरह से गलत पेड़ भौंक रहा हूँ ??
--- का पालन करें: ऐसा लगता है कि अगर मैं इंटरफ़ेस पर @ImforceedBy टैग का उपयोग करता हूं, तो मैं वह प्राप्त कर सकता हूं जो मैं चाहता हूं और फिर परीक्षण के मामले में एक बाध्यकारी प्रदान करें, जो बीच में 1-1 मानचित्रण होने पर अच्छी तरह से काम करता है इंटरफ़ेस और कार्यान्वयन।
इसके अलावा, एक सहकर्मी के साथ इस पर चर्चा करने के बाद, ऐसा लगता है कि हम एक पूरे मॉड्यूल को ओवरराइड करने की सड़क पर उतरेंगे और सुनिश्चित करेंगे कि हमारे पास हमारे मॉड्यूल सही ढंग से परिभाषित हैं। ऐसा लगता है कि यह एक समस्या का कारण बन सकता है, जहां एक मॉड्यूल में एक बंधन को गलत तरीके से स्थानांतरित किया जाता है और इसे स्थानांतरित करने की आवश्यकता होती है, इस प्रकार संभवतः परीक्षणों का भार टूट जाता है क्योंकि बाइंडिंग अब ओवरराइड होने के लिए उपलब्ध नहीं हो सकता है।