आज मैंने कुछ ऐसा ठोकर खाया जो मुझे नहीं लगता था कि मुझे परेशानी होगी।कोणीय 2 इंजेक्शन योग्य इंटरफ़ेस?
जावा और स्प्रिंग में, मैं दो बीन्स घोषित कर सकता हूं जो दोनों एक दिए गए इंटरफेस को लागू करते हैं, जबकि दूसरी कक्षा में जहां उन्हें इंजेक्शन दिया जाता है, मैं केवल इंटरफ़ेस के साथ काम करता हूं; यह वास्तव में मुझे आईओसी के साथ क्या पसंद है: आपको वास्तव में यह नहीं पता होना चाहिए कि आप किस वस्तु के साथ काम कर रहे हैं, केवल दया है।
webapp.module.ts:
...
import { WebAppConfigurationService } from './app/services/webapp.configuration.service';
@NgModule({
...
providers: [WebAppConfigurationService]
})
export class AppModule { }
tnsapp.module.ts:
...
import { TnsConfigurationService } from './services/tns.configuration.service';
@NgModule({
...
providers: [TnsConfigurationService]
})
export class AppModule { }
तो मेरी छोटी Angular2/टाइपप्रति कार्यक्रम में, मैं भी ऐसा ही करने की कोशिश कर रहा था
इन दोनों मॉड्यूल एक अलग प्रदाता का उपयोग कर रहे हैं: TnsConfigurationService
या WebAppConfigurationService
।
हालांकि, इन दो @Injectable
सेवाएं एक ही इंटरफ़ेस को लागू:
configuration.interface:
export interface IConfigurationService {
...
}
अंत में, मेरी घटकों में से एक में, मैं इन मॉड्यूल मैं पता चला है में से एक द्वारा प्रदान की इंजेक्शन का उपयोग आप शुरुआत में:
import { IConfigurationService } from './configuration.interface';
export class HeroesService {
constructor(private configurationService: IConfigurationService) { }
}
मेरी उम्मीद थी कि यह अंतिम घटक सही सेवा के साथ इंजेक्शन दिया जा रहा है, भले ही पैरा मीटर केवल स्पष्ट रूप से इंटरफ़ेस को परिभाषित कर रहा है। बेशक मुझे एक त्रुटि मिलती है ("त्रुटि: HeroesService के लिए सभी पैरामीटर को हल नहीं कर सकता")
अब, मुझे इसके लिए एक आसान समाधान की उम्मीद नहीं है क्योंकि यह वास्तुकला की कमी के रूप में लगता है। लेकिन शायद कोई मुझे वैकल्पिक डिजाइन के लिए इंगित कर सकता है?
डी दस्तावेज़ीकरण पर एक नज़र डालें https://angular.io/docs/ts/latest/guide/dependency-injection.html#typescript-interfaces-aren-t-valid-tokens – yurzui
@yurzui मुझे यह पसंद है: " यह कोणीय की गलती नहीं है। " :-) ठीक है, शायद यह करने के लिए अभी भी एक सुंदर तरीका है ... मैं बाद में इस 'ओपेक टोकन' – Sebas
के बारे में पढ़ूंगा ओपेक टोकन मुख्य रूप से गैर-वर्ग प्रदाताओं (कारखानों और मूल्यों) के लिए है। – estus