मैं वर्तमान में कोणीय 2 में डि की खुदाई कर रहा हूँ मैं इस तरह ठोस डेटाटाइप के लिए एक सामान्य उपप्रकार का उपयोग कर किसी REST- क्लाइंट को लागू कर रहा हूँ बाहर:कोणीय 2 इंजेक्षन निर्भरता निर्माता
class RESTClient<T>{
constructor() {
var inj = ReflectiveInjector.resolveAndCreate([HTTP_PROVIDERS]);
this.http = inj.get(Http);
this.conf = RESTConfiguration;
}
}
class BookClient extends RESTClient<Book>{
constructor(){
// since I dont want to inject the HTTP Providers here, I'm using a custom injector in the super class
super();
}
}
class WriterClient extends RESTClient<Writer>{
...
...
}
तो जैसा कि मैं समझता हूँ, वहाँ सुपरक्लास रीस्ट-सर्विस द्वारा इंजेक्शन किए गए सभी RESTCLIents के बीच साझा की गई एक http सेवा होगी।
अब मैं इस तरह के रूप में एक RESTConfiguration वर्ग करना चाहते हैं:
@Injectable()
export class RESTConfiguration {
get baseURL() {
return this._baseURL;
}
set baseURL(value) {
alert("sets value to"+value);
this._baseURL = value;
}
private _baseURL;
}
यह इस तरह के रूप मुख्य अनुप्रयोग में कॉन्फ़िगर किया जाना चाहिए:
initializeApp(){
this.restconf.baseURL = "http://localhost:3004/";
}
bootstrap(MyApp, [RESTConfiguration]).then();
मैं अब सोच रहा हूँ कि कैसे एक सिंगलटन सुई पुनर्नवीनीकरण कक्षा में मेरे RESTConfiguration का उदाहरण कन्स्ट्रक्टर को पास किए बिना, जिसे मैं कोड डुप्लिकेशंस को कम करने और टाइपस्क्रिप्ट में जेनेरिक के साथ समस्याओं से बचने के लिए तर्क-कम रहना चाहता हूं।
उपर्युक्त उदाहरण (पहला कोड स्निपेट) में मैं प्रतिबिंबित इंजेक्टर I का उपयोग करके अपनी कॉन्फ़िगरेशन इंजेक्ट करने का प्रयास कर रहा हूं जो मुझे मेरे कॉन्फ़िगरेशन का एक कस्टम उदाहरण प्रदान करता है।
मैं कई समाधान के बारे में सोचा:
एक उपलब्ध बनाने एक सेवा या कुछ स्थिर वर्ग संपत्ति
में अतिरिक्त सिंगलटन-तर्क को लागू करने का उपयोग करके "वैश्विक इंजेक्टर" Apps की एक्सेस हो रही मेरी कॉन्फ़िगरेशन
कन्स्ट्रक्टर के बाहर कोणीय-देशी इंजेक्शन विधि का उपयोग करने का कोई तरीका ढूंढ रहा है?
क्या मेरी सोच में कोई गलती है या क्या मैं डी ढांचे का दुरुपयोग कर रहा हूं?
http://stackoverflow.com/questions/39038791/inheritance-and- निर्भरता- इंजेक्शन/39038814 की एक डुप्ली की तरह दिखता है?noredirect = 1 # comment65548939_39038814 –
ऊपर दिए गए लिंक को पढ़ने के बाद मैं लेखक को बहुत अधिक महसूस करता हूं - मैं वैश्विक इंजेक्टर को पारित करने के लिए कक्षाओं के लिए अपने "गंदे हैक" का उपयोग करने के लिए इच्छुक हूं - मैं निश्चित रूप से कोड को डुप्लिकेट नहीं करना चाहता हूं ~ 20-30 कक्षाएं इस के आसपास पाने के लिए कोई रास्ता? उपरोक्त दिखाए गए कस्टम इंजेक्टर के साथ क्या तरीका है? मैं फिर सीधे अपनी सेवा में कॉन्फ़िगरेशन संलग्न कर सकता हूं या इसे केवल एक साधारण स्थैतिक वर्ग बना सकता हूं ... – hakkurishian
यह एक स्वतंत्र इंजेक्टर बनाता है। किसी भी मॉड्यूल में पंजीकृत प्रदाता और इन प्रदाताओं के लिए बनाए गए उदाहरण इस कस्टम इंजेक्टर द्वारा वापस नहीं किए जाएंगे। आप लिंक किए गए प्रश्न के उत्तर में ऐसा कर सकते हैं - अपने कोणीय 2 ऐप के इंजेक्टर को पास करने और इसके बजाय इस इंजेक्टर से सेवाओं को प्राप्त करने के लिए। –