उदाहरण:क्या आधार वर्ग में संपत्ति इंजेक्शन का उपयोग करना उचित है जब निर्भरता केवल बेस क्लास में आवश्यक है?
public abstract class BaseControler : Controller
{
public IUnitOfWork UnitOfWork { get; set; }
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-)
public HomeController(IUserRepository userRepository)
{
_userRepository = userRepository;
}
}
हम सभी जानते हैं हम निर्माता इंजेक्शन उपयोग करने के लिए जब निर्भरता है की आवश्यकता है। यदि यह वैकल्पिक निर्भरता है तो हम संपत्ति इंजेक्शन का उपयोग कर सकते हैं।
लेकिन जब आपको केवल अपनी बेस क्लास निर्भरता की आवश्यकता होती है तो आपको क्या करना चाहिए?
जब आप कन्स्ट्रक्टर इंजेक्शन का उपयोग करेंगे, तो आप मेरी राय में सभी व्युत्पन्न कक्षाओं को प्रदूषित करेंगे।
public abstract class BaseControler : Controller
{
readonly IUnitOfWork _unitOfWork;
public BaseControler(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
}
public class HomeController : BaseControler
{
readonly IUserRepository _userRepository;
// :-(
public HomeController(IUserRepository userRepository,
IUnitOfWork unitOfWork) : base(unitOfWork)
{
_userRepository = userRepository;
}
}
यह एक आधार वर्ग में संपत्ति इंजेक्शन उपयोग करने के लिए जब एक निर्भरता केवल आधार वर्ग में आवश्यक है approperiate है?
मुझे आपकी बात दिखाई देती है, लेकिन मुझे जो समस्या मिलेगी वह बहुत सारे कन्स्ट्रक्टर पैरामीटर हैं। मुद्दा यह है कि व्युत्पन्न कक्षाएं आधार वर्ग की बजाय निर्भरता पर सीधे बात नहीं कर रही हैं। इसलिए मैं निर्भरता के लिए एक निर्भरता और अप्रत्यक्ष कॉल पर प्रत्यक्ष कॉल के बीच अंतर करूँगा। – Rookian
@ रुकेयन, यदि आप ऐसी स्थिति में आते हैं जहां आपके पास एकाधिक कन्स्ट्रक्टर पैरामीटर हैं, तो आप उन सेवाओं को बनाने पर विचार कर सकते हैं जो उन निर्भरताओं को एकत्रित करेंगे और फिर केवल कन्स्ट्रक्टर में सेवा को इंजेक्ट करेंगे। –
+1 विरासत पर रचना का पक्ष लें। यदि यह बहुत सारे कन्स्ट्रक्टर पैरामीटर के साथ एक समस्या बन जाता है, तो अपनी विरासत रणनीति को दोष दें, कन्स्ट्रक्टर इंजेक्शन नहीं। –