मैं सोच रहा था कि कुछ सर्वोत्तम प्रथाओं को लॉगिंग और फ्रेमवर्क और निर्भरता इंजेक्शन लॉगिंग के आसपास क्या था। विशेष रूप से, यदि मैं एक कक्षा को डिजाइन कर रहा हूं जिसके लिए लॉग इन करने की आवश्यकता है, तो मुझे निर्भरता इंजेक्शन को ध्यान में रखने के लिए लॉग इन करने के लिए इंटरफ़ेस प्राप्त करने के बारे में कैसे जाना चाहिए?निर्भरता इंजेक्शन और लॉगिंग इंटरफेस
निर्भरता इंजेक्शन यह कहता है कि बाहरी निर्भरताओं को बाहरी (कन्स्ट्रक्टर या प्रॉपर्टी सेटर्स) से इंजेक्शन दिया जाना चाहिए, तो क्या मुझे कन्स्ट्रक्टर में आईएलओजी इंस्टेंस लेना चाहिए और कक्षा में उपयोग करना चाहिए? क्या मुझे वैकल्पिक निर्भरता लॉगिंग करने और इसे एक सेटटर में प्राप्त करने पर विचार करना चाहिए? क्या मैं लॉगिंग इंटरफ़ेस को बदलने की अनुमति देकर बहुत अधिक लचीलापन के लिए दबाव डाल रहा हूं और क्या मुझे एक विशिष्ट लॉगिंग इंटरफ़ेस पर हार्ड निर्भरता लेनी चाहिए (उदाहरण के लिए एक फैक्ट्री विधि में कॉल के माध्यम से एक स्थिर आईएलओजी वैरिएबल बनाएं)? क्या यह फैक्ट्री विधि आईएलओजी कार्यान्वयन प्राप्त करने के लिए कंटेनर में कॉल कर सकती है या क्या यह प्रारंभिक होने वाले स्थिर चर के बीच प्रारंभिक संघर्ष और आईओसी कंटेनर शुरू किया जा रहा है?
मैं यह कर जाना चाहिए:
public class MyService : ISomeService
{
private static readonly ILogger s_log =
LoggingFactory.GetLogger(typeof(MyService))
...
}
या शायद यह:
public class MyService : ISomeService
{
protected virtual ILogger Logger {get; private set;}
public MyService(ILogger logger, [other dependencies])
{
Logger = logger;
}
}
या यहाँ तक कि इस:
public class MyService : ISomeService
{
public virtual ILogger Logger {get; set;}
public MyService()
{
}
}
अन्य पैटर्न या तरीके यह करने के लिए? वहां क्या लोग हैं? क्या काम कर रहा है और कब?
सेवा के लिए लॉगर होने पर या नहीं, इस पर निर्भर करता है कि मैं दूसरे या तीसरे विकल्पों का चयन करूंगा। यूनिट परीक्षण + नकली वस्तुओं पर युक्तियों के लिए – toad