मैं एक सामान्य प्रकार बाध्यकारी ओवरराइड करना चाहता हूं, लेकिन मुझे हमेशा "No implementation was bound
" त्रुटि मिल गई। यहाँजब मैं गुइस के साथ सामान्य बाध्यकारी को ओवरराइड करने का प्रयास करता हूं तो मुझे कोई त्रुटि क्यों होती है? (TypeLiteral)
public interface IParser<I, O> {}
public class Parser1 implements IParser<String, String> {
IParser<String, String> mParser;
@Inject
public Parser1(IParser<String, String> parser) {
mParser = parser;
}
}
public class Parser2 extends Parser1 {
@Inject
public Parser2(IParser<String, String> parser) {
super(parser);
}
}
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser1>() {});
}
}
और मेरे इंजेक्टर रचना है:
मैं roboguice 3.
यहाँ उपयोग कर रहा हूँ कोड का एक उदाहरण है कि मैं का उपयोग करें
RoboGuice.getOrCreateBaseApplicationInjector(this,
RoboGuice.DEFAULT_STAGE,
RoboGuice.newDefaultRoboModule(this),
Modules.override(new MyModule()).with(new AbstractModule() {
@Override
protected void configure() {
bind(new TypeLiteral<IParser<String, String>>() {}).to(new TypeLiteral<Parser2>() {});
}
})
);
अगर मैं डॉन ' टी इसे ओवरराइड करने का प्रयास करें (केवल उपयोगकर्ता पार्सर 1), सब ठीक है, जब मैं प्रदाताओं के साथ मानक ऑब्जेक्ट को ओवरराइड करता हूं, तो यह भी अच्छी तरह से काम करता है, लेकिन TypeLiteral के साथ नहीं।
मेरे त्रुटि है:
com.google.inject.CreationException: Unable to create injector, see the following errors:
1) No implementation for IParser<String, String> was bound.
क्या मैं गलत कर रहा हूँ?
धन्यवाद।
किसी को भी एक सुराग है? क्या ऑरेलियन को अधिक जानकारी प्रदान करने की आवश्यकता है? –
मैं गुइस 4 के तहत इस व्यवहार को पुन: उत्पन्न करने में असमर्थ हूं। मुझे लगता है कि एक परिपत्र निर्भरता है, जो कि गुइस एक प्रॉक्सी वर्ग शिम को संतुष्ट करने के लिए उपयोग कर रहा है। Roboguice कहीं प्रॉक्सी अक्षम कर सकता है? – Cardano
साइड नोट: आपको कभी भी 'नया टाइप लिटरल() {} 'की आवश्यकता नहीं है, आप केवल' ASimpleType.class' –
Cardano