मैं कैसे ग्रहण 4 अपनी कक्षाओं में वस्तुओं इंजेक्षन कर सकते हैं के तीन तरीके के बारे में पता:
- स्टार्ट-अप ग्रहण रनटाइम के दौरान कक्षाओं यह को दर्शाता है में प्रासंगिक एनोटेशन के लिए लग रहा है।
- 1 में इंजेक्शन वाले ऑब्जेक्ट ट्रैक किए गए हैं और बदले जाने पर फिर से इंजेक्शन दिए जाएंगे।
- ContextInjectionFactory और IEclipseContext का उपयोग करके इंजेक्शन को मैन्युअल रूप से ट्रिगर करना।
आप जो चाहते हैं वह तीसरे विकल्प के साथ संभव हो सकता है। Here एक कोड उदाहरण है:
ManipulateModelhandler man = new ManipulateModelhandler();
//inject the context into an object
//IEclipseContext iEclipseContext was injected into this class
ContextInjectionFactory.inject(man,iEclipseContext);
man.execute();
समस्या हालांकि है; कि IEclipseContext को पहले से ही उस वर्ग में इंजेक्शन देने की आवश्यकता है जो ऑब्जेक्ट की आवश्यकता वाले ऑब्जेक्ट तक पहुंच सके। आवश्यक इंजेक्शन की संख्या के आधार पर, प्रतिनिधिमंडल का उपयोग करने के लिए यह अधिक उपयोगी हो सकता है (टेस्टेबिलिटी एक तर्क होगा)।
@Inject
public void setFoo(Foo foo) {
//Bar is not attached to the e4 Application Model
bar.setFoo(foo);
}
इसलिए, बेहतर समाधान शायद @Creatable एनोटेशन का उपयोग कर रहा है। बस अपनी कक्षा को एनोटेट करें, और इसे नो-तर्क कन्स्ट्रक्टर दें।
@Creatable
public class Foo {
public Foo() {}
}
उपरोक्त विधि के रूप में उस प्रकार पर @Inject का उपयोग करना, ग्रहण इन्स्तांत जाने और इसे इंजेक्षन जाएगा। नुकसान यह है कि आप अब ऑब्जेक्ट सृजन को नियंत्रित नहीं कर सकते हैं, जैसा कि आप ContextInjectionFactory.inject (..) के साथ करेंगे।
स्रोत
2012-12-25 01:22:59
बस एक छोटा सा नोट है कि अधिकांश लोग javax.inject इंजेक्शन लगाने के लिए देख सकते हैं। को उस कक्षा में शामिल करें जिसमें इंजेक्शन वाले उदाहरणों की आवश्यकता होती है, 3. –
के विकल्प के रूप में मुझे 'IEclipseContext' मिलता है यदि कथन 'ContextInjectionFactory.inject (मैन, iEclipseContext)' कक्षा में चल रहा है जो अनुप्रयोग मॉडल में परिभाषित नहीं है? – kenshinji
@kenshinji शायद यह [उत्तर] (https://stackoverflow.com/questions/18316970/how-to-get-the-ieclipsecontext-in-an-activator/33230722#33230722) आपकी मदद करेगा। लेकिन यह इंगित करना महत्वपूर्ण है कि यह आपको _the_ संदर्भ नहीं देगा, बल्कि _a_ संदर्भ देगा। ग्रहण संदर्भ वस्तुओं का एक पेड़ रखता है, और उनमें से एक को आपके इच्छित मूल्यों में शामिल किया गया है या नहीं, आपके उपयोग के मामले पर निर्भर करता है। हो सकता है कि 'E4Aplication.createDefaultContext()' पर भी एक नज़र डालें। –