जहां तक मुझे पता है कि विंडसर कंटेनर से निर्भरता प्राप्त करने के तीन तरीके हैं (आकस्मिक रूप से आपको कभी भी कुछ स्तर स्तर को छोड़कर स्पष्ट रूप से कुछ भी हल करने की आवश्यकता नहीं है, बस सुनिश्चित करें कि यह सब कुछ है कंटेनर में पंजीकृत हो और निर्भरता आप के लिए तार कर रहे हैं):
- एक निर्माता तर्क जोड़ें (यह एक आवश्यक निर्भरता माना जाता है)
- वर्ग के लिए एक संपत्ति जोड़ें (यह एक वैकल्पिक निर्भरता माना जाता है)
- IWindsorContainer इंस्टेंस को पकड़ें और संकल्प को कॉल करें (यह आमतौर पर एक होता है बुरा विचार)
आम तौर पर विशेष रूप से प्रवेश करने के लिए आप बनाना होगा कि एक वैकल्पिक निर्भरता तो विकल्प 2 के लिए जाने के लिए और कुछ इस तरह करते हैं (मैं अपने ILoggerFactory विचार का उपयोग किया है, मैं वास्तव में इस के लिए अपने ही कारखाने को परिभाषित नहीं होगा - देखना बाद में):
private ILoggerFactory _loggerFactory = LoggerFactory.NullLoggerFactory;
public ILoggerFactory LoggerFactory
{
get { return _loggerFactory; }
set { _loggerFactory = value; }
}
इस तरह, अपने कोड में, आप LoggerFactory संपत्ति का उपयोग कर सकते हैं और आप "अशक्त" संस्करण प्राप्त करता है, तो एक कंटेनर को जोड़ा नहीं किया गया है (यह सिर्फ ILoggerFactory का एक उदाहरण है कि बनाता है एक लॉगर जो कुछ भी नहीं करता है) और यदि आपको वास्तविक संस्करण मिल गया है (यदि आप इसका उपयोग करते हैं तो आप केवल शून्य की जांच कर सकते हैं, या यदि आप जानते हैं कि कोई इसका उपयोग करेगा)। आप इस संपत्ति को कक्षाओं पर परिभाषित करते हैं जहां आपको लॉगर की आवश्यकता होती है और आप कर चुके हैं। मुझे लगता है कि के साथ एक छोटे मुद्दा है के बाद से मैं नहीं है वास्तव में मेरे कोड भर में एक विंडसर इंटरफेस चाहते हैं -
एक अलग रूप में
संयोग से, वहाँ है कि आप के बजाय इस्तेमाल कर सकते हैं विंडसर में logging facility के रूप में ऐसी बात है आधार जो मैंने अतीत में किया है, मैंने अपने स्वयं के आईएलओगर इंटरफ़ेस (और इसके एक शून्य कार्यान्वयन) को परिभाषित किया है और उसके बाद एक "महल लॉगर प्रॉक्सी" बनाया है जो मेरे आईएलओगर इंटरफ़ेस को लागू करता है लेकिन महल इलोगर पर निर्भरता है जो इसे कॉल करता है वास्तविक लॉगिंग करने के लिए। इस तरह से मैं इसे अपनी असेंबली में अलग कर सकता हूं और मेरे आवेदन को यह नहीं पता कि विंडसर निर्भरताओं को इंजेक्ट कर रहा है।
शायद आपको परवाह नहीं है, बस सोचा कि मैं इसका उल्लेख करूंगा।