यह कुछ हद तक AspNet Core में कंस्ट्रक्टर्स को Pass ILogger या ILoggerFactory से संबंधित हो सकता है ? , हालांकि यह विशेष रूप से लाइब्रेरी डिज़ाइन के बारे में है , न कि उन पुस्तकालयों का उपयोग करने वाले वास्तविक अनुप्रयोग कैसे इसके लॉगिंग को लागू करते हैं।
मैं एक .net Standard 2.0 लाइब्रेरी लिख रहा हूं जिसे Nuget के माध्यम से स्थापित किया जाएगा, और उस लाइब्रेरी का उपयोग करने वाले लोगों को कुछ डिबग जानकारी प्राप्त करने की अनुमति देने के लिए , मैं Microsoft पर आधारित हूं ।
हालाँकि, मैं कई इंटरफेस देख रहा हूँ, और वेब पर नमूना कोड कभी-कभी उपयोग करता है ILoggerFactory
और कक्षा के ctor में एक लकड़हारा बनाता है। ऐसा भी है ILoggerProvider
जो फैक्टरी के केवल पढ़ने वाले संस्करण की तरह दिखता है, लेकिन कार्यान्वयन दोनों इंटरफेस को लागू कर सकते हैं या नहीं भी कर सकते हैं, इसलिए मुझे चुनना होगा। (फैक्टरी प्रदाता से अधिक आम लगता है)।
कुछ कोड मैंने देखा है कि गैर-जेनेरिक ILogger
इंटरफ़ेस का उपयोग करता है और एक ही लकड़हारे का एक उदाहरण भी साझा कर सकता है, और कुछ ILogger<T>
अपने ctor में लेते हैं और उम्मीद करते हैं कि DI कंटेनर खुले सामान्य प्रकारों का समर्थन करेगा या प्रत्येक ILogger<T>
पुस्तकालय के प्रत्येक बदलाव को स्पष्ट रूप से पंजीकृत करेगा। का उपयोग करता है।
अभी, मुझे लगता है कि ILogger<T>
यह सही दृष्टिकोण है, और शायद एक ctor जो उस तर्क को नहीं लेता है और इसके बजाय सिर्फ Null Logger पास करता है। इस तरह, यदि कोई लॉगिंग की आवश्यकता नहीं है, तो कोई भी उपयोग नहीं किया जाता है। हालांकि, कुछ DI कंटेनर सबसे बड़ा ctor उठाते हैं और इस तरह वैसे भी विफल हो जाते हैं।
मैं उत्सुक हूं कि मैं उपयोगकर्ताओं के लिए कम से कम सिरदर्द बनाने के लिए यहां क्या करने वाला हूं , जबकि वांछित होने पर उचित लॉगिंग समर्थन की अनुमति देता हूं ।