यह पता लगाने की कैसे सबसे अच्छा इस परिदृश्य को संभालने के लिए कोशिश कर रहा है:निर्भरता इंजेक्शन और कारखाने
public class RequestContext : IRequestContext
{
private readonly ServiceFactory<IWeatherService> _weatherService;
public RequestContext(ServiceFactory<IWeatherService> weatherService, UserLocation location, string query)
{
_weatherService = weatherService;
...
निर्भरता किस तरह की:
जैसे एक RequestContext
वर्ग है जो एक बाहरी सेवा से निर्भरता है, मान लें क्या मुझे कक्षा में आवश्यकता होनी चाहिए जो आखिरकार RequestContext
को तुरंत चालू करेगी? यह ServiceFactory<IWeatherService>
हो सकता है, लेकिन यह सही नहीं लगता नहीं है, या मैं की तर्ज पर इसके लिए एक IRequestContextFactory
बना सकते हैं:
public class RequestContextFactory : IRequestContextFactory
{
private readonly ServiceFactory<IWeatherService> _weatherService;
public RequestContextFactory(ServiceFactory<IWeatherService> weatherService)
{
_weatherService = weatherService;
}
public RequestContext Create(UserLocation location, string query)
{
return new RequestContext(_weatherService, location, query);
}
}
और फिर निर्माता इंजेक्शन के माध्यम से IRequestContextFactory
गुजरती हैं।
यह ऐसा करने का एक अच्छा तरीका प्रतीत होता है, लेकिन इस दृष्टिकोण के साथ समस्या यह है कि मुझे लगता है कि यह खोज में बाधा डालता है (देवताओं को कारखाने के बारे में पता होना चाहिए और इसे लागू करना चाहिए, जो वास्तव में स्पष्ट नहीं है)।
क्या कोई बेहतर/अधिक खोजने योग्य तरीका है जिसे मैं याद कर रहा हूं?
दिलचस्प, मैंने सीधे अनुरोध कॉन्टेक्स्ट इंजेक्शन के बारे में नहीं सोचा है क्योंकि इसके पैरामीटर प्रत्येक पृष्ठ अनुरोध (एएसपी.नेट एमवीसी) पर भिन्न होंगे। क्या उदाहरण के लिए क्वेरी स्ट्रिंग में देखकर मेरे लिए कक्षा को ठीक से चालू करने के लिए एन इंजेक्ट का उपयोग करना अच्छा विचार होगा? या क्या मैं एक इंजेक्शन को एक कारखाने का उपयोग करने के लिए कॉन्फ़िगर करता हूं जो एक उदाहरण देता है, लेकिन मूल स्तर पर केवल RequestContext इंजेक्ट करता है? – andreialecu
मुझे अभी तक इस बारे में विनिर्देशों का उत्तर देने के लिए पर्याप्त रूप से निनजेक नहीं पता है, लेकिन यदि यह सीधे इसका समर्थन नहीं करता है, तो आप उच्च स्तर के उपभोक्ता में इंजेक्शन वाली सार फैक्ट्री का उपयोग करके हमेशा इस छोटे हिस्से को अपने आप कार्यान्वित कर सकते हैं। "प्रदाता" प्रत्यय के लिए –