2010-11-15 12 views
5

मैं कुछ लॉगिंग निर्भरताओं को हटाने की कोशिश कर रहा हूं और कैसल विंडसर की लॉगिंग सुविधा में ठोकर खा रहा हूं। हालांकि, मुझे इस बारे में संदेह है कि मुझे इसका उपयोग करना चाहिए या नहीं।कैसल विंडसर लॉगिंग सुविधा

public class MyClass 
{ 
    public Castle.Core.Logging.ILogger Logger { get; set; } 

    ... 
} 

विंडसर की लॉगिंग सुविधा की आवश्यकता है कि आप अपने लॉगर को संपत्ति के रूप में बेनकाब करें। क्या यह वाकई एक अच्छा अभ्यास है? मुझे लगता है कि मैं लगभग encapsulation तोड़ रहा हूँ क्योंकि आम तौर पर जब मैं एक घटक का पुन: उपयोग करता हूं, मुझे इसकी लॉगिंग तंत्र की परवाह नहीं है और मैं आमतौर पर इसे उजागर नहीं करना चाहता हूं।

यदि मैं एक कस्टम रैपर का उपयोग करता हूं जो लॉग बनाने के लिए स्थिर वर्ग का उपयोग करता है, तो मैं इसे निजी रख सकता हूं। उदाहरण के लिए:

public class MyClass 
{ 
    private static MyCustomWrapper.ILogger Logger = LogManager.GetLogger(typeof(MyClass)); 

    ... 
} 

मैं कारण मैं लॉगिंग सुविधा का उपयोग करना चाहिए के लिए वेब खोज की है, लेकिन मैं केवल कैसे इसका इस्तेमाल करने पर लेख खोजने हूँ, लेकिन नहीं क्यों मुझे इसका इस्तेमाल करना चाहिए। मुझे लगता है कि मैं बिंदु खो रहा हूँ। लॉगिंग घटक को उजागर करना मुझे डरावना करने का प्रकार है।

उत्तर

5

विंडसर की लॉगिंग सुविधा की आवश्यकता है कि आप अपने लॉगर को संपत्ति के रूप में बेनकाब करें।

आवश्यक नहीं है। आप अपने लॉगर को कन्स्ट्रक्टर (यानी अनिवार्य) निर्भरता के रूप में भी डाल सकते हैं। लॉगर आमतौर पर एक संपत्ति के रूप में घोषित किया जाता है (यानी वैकल्पिक निर्भरता) क्योंकि कोई लॉगर नहीं हो सकता है। यही है, घटक एक लॉगर के बिना काम करने में सक्षम होना चाहिए।

अगर मैं जो कि तुम क्या करने की कोशिश कर रहे थे की तुलना में IMHO बदतर है लॉग

एक सेवा लोकेटर है कि बनाने के लिए एक स्थिर वर्ग का उपयोग करता है एक कस्टम आवरण, MyClassLogManager है कि कोड जोड़ों, का उपयोग से दूर।

+0

लेकिन क्या मैं पहले से ही 'Castle.Core.Logging.ILogger' के साथ नहीं जोड़ा जाएगा? या ऐसा इसलिए है क्योंकि 'LogManager' एक स्थिर वर्ग है और मैं इसे प्रतिस्थापित नहीं कर सकता? – Books

+0

@ एशले: बिल्कुल। एक इंटरफ़ेस के साथ बहुत कम युग्मन है। –