2010-10-15 14 views
8

मैं एक कस्टम एपेंडर के कन्स्ट्रक्टर को तर्क पारित करना चाहता हूं, इसलिए मुझे लगता है कि मुझे परिशिष्ट के प्रारंभिक तंत्र को ओवरराइड करना है। समस्या यह है कि मैं दस्तावेज़ों में, इसे हुक करने का एक तरीका नहीं ढूंढ सकता, और यह मुझे लगता है कि यह संभव नहीं है (या दस्तावेज़ डक अपूर्ण हैं)।क्या मैं एक कस्टम log4net एपेंडर के कन्स्ट्रक्टर के लिए तर्क पास कर सकता हूं?

संस्करण 1.2.10 के लिए, स्रोत कोड को संशोधित किए बिना यह संभव नहीं है। प्रासंगिक अनुभाग Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286 में है:

IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true)); 

आप देख सकते हैं, यह मेरे मेरी जरूरतों को प्राप्त करने की अनुमति के लिए यह अधिभार (या कि रास्ते में कुछ) का उपयोग करना चाहिए।

Activator.CreateInstance(Type, Object[]) 

उत्तर

4

मुझे यकीन है कि अगर मैं अपने लक्ष्य को समझ में नहीं हूँ, लेकिन अगर आप अपने appender विन्यास होना चाहते हैं आप मूल रूप से अपने appender पर एक संपत्ति का खुलासा किया है। फिर आप या तो प्रोग्राम को या प्रोग्रामेटिक रूप से या कॉन्फ़िगरेशन फ़ाइल में सेट कर सकते हैं।

UdpAppender इस तरह एक संपत्ति को उजागर करता है:

public int LocalPort 
{ 
    get; set; 
} 

(यह वास्तव में थोड़ा अधिक जटिल है के रूप में वे जाँच लें कि सेटर में मान एक मान्य बंदरगाह है।)

विन्यास फाइल में आप इस तरह से इसका इस्तेमाल करते हैं:

<localPort value="8080" /> 

इस स्ट्रिंग, पूर्णांक की तरह साधारण प्रकार के लिए बहुत अच्छी तरह से काम करता है ... लेकिन यह भी IPAddress जैसे कुछ जटिल प्रकार के लिए। यदि आपके पास अपना प्रकार है तो इसे काम करना अधिक कठिन होगा और मुझे पहले यह जांचना होगा कि यह कैसे किया जाता है।

+2

स्टीफन, समस्या यह है कि आप अंत में लिखते हैं: मुझे एक जटिल वस्तु प्रदान करना है कि इसे रनटाइम पर तुरंत चालू किया जाए। इसे XML कॉन्फ़िगरेशन के माध्यम से प्रदान करने का कोई तरीका नहीं है। – Simone

+0

आप कुछ पैरामीटर तारों के आधार पर इस कक्षा का उदाहरण नहीं बना सकते हैं? –

+0

नहीं, मुझे एक और मौजूदा वस्तु पारित करनी होगी। – Simone

1

संस्करण 1.2.10 के लिए, स्रोत कोड को संशोधित किए बिना यह संभव नहीं है।

प्रासंगिक अनुभाग लाइन 286 पर भंडार \ पदानुक्रम \ XmlHierarchyConfigurator.cs में है:

`IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));` 

आप देख सकते हैं, यह

Activator.CreateInstance(Type, Object[])
अधिभार (या कि रास्ते में कुछ) का उपयोग करना चाहिए मुझे प्राप्त करने के लिए अनुमति देने के लिए मेरी की जरूरत है।

+0

जब तक आप यह नहीं कह रहे कि उत्तर "यह संभव नहीं है", यह "उत्तर" प्रश्न के लिए अधिक जानकारी प्रतीत होता है ... –

संबंधित मुद्दे

 संबंधित मुद्दे