मैं पुस्तकालय पर काम कर रहा हूं जो एप्लिकेशन कॉन्फ़िगरेशन को सरल बनाता है। अनिवार्य रूप से, लाइब्रेरी के उपभोक्ता या तो गुणों के साथ अपने कॉन्फ़िगरेशन कक्षाओं को सजाने या कोड में घोषणात्मक रूप से सेटिंग्स को प्रारंभ करते हैं। कॉन्फ़िगरेशन गुण (एक्सेसर्स) को पढ़ने/लिखने या कक्षा से डिफ़ॉल्ट प्राप्त करने के लिए 1 या अधिक स्रोत निर्दिष्ट करना संभव होगा। उदाहरण के लिए, निम्नलिखित:लाइब्रेरी में DI के लिए सर्वोत्तम प्रथाएं गुणों में प्रकार
[ConfigurationNamespace(DefaultAccessors = new Type[] { typeof(AppSettingsAccessor) })]
public class ClientConfiguration : Configuration<IClientConfiguration>
{
[ConfigurationItem(Accessors = new Type[] {
typeof((RegistryAccessor))
})]
public bool BypassCertificateVerification { get; set; }
}
पढ़ने & विभिन्न स्रोतों (AppSettings, रजिस्ट्री, .ini, आदि, आदि) से लिखित रूप से
var config = new Configuration<IClientConfiguration>();
config.SetDefaultAccessors(new[] { typeof(AppSettingsAccessor) });
config.SetPropertyAccessors(
property: x => x.BypassCertificateVerification,
accessors: new[] { typeof(RegistryAccessor) }
);
पहुंचकर्ता सौदा के बराबर होगा। मैं उपभोक्ताओं को उनकी जरूरतों को पूरा करने के लिए क्षमताओं का विस्तार करने की अनुमति देना चाहता हूं। मैं इसे आईओसी कंटेनर अज्ञेयवादी रखना चाहता हूं। प्रकार [] बाधा मुझे दी गई है क्योंकि मैं संकलन-समय बनाम रनटाइम समस्याओं के कारण विशेषताओं में प्रकार निर्दिष्ट नहीं कर सकता।
वहाँ instantiating के लिए एक डिफ़ॉल्ट तंत्र के लिए एक रास्ता है इन (जैसे, कुछ Activator.CreateInstance के आधार पर), लेकिन यह भी सेवा लोकेटर/निर्भरता समाधानकर्ता पद्धति का उपयोग कर लेने वाली कोड बिना क्रम पर इन accessors का दृष्टांत के लिए अनुमति देते? मैं इस बारे में बहुत कुछ पढ़ रहा हूं कि क्यों सेवा लोकेटर/निर्भरता संकल्प पैटर्न एक बुरा विरोधी पैटर्न है, लेकिन मैं नौकरी के लिए एक बेहतर उपकरण नहीं समझ सकता। मैं निर्भरता संकल्प का उपयोग कर एमवीसी ढांचे और सिग्नलआर पुस्तकालयों को देखता हूं। क्या वे समय के 100% बुरा हैं या यह एक बढ़त मामला है? जहां तक मैं कह सकता हूं, अमूर्त फैक्ट्री पैटर्न इसे काट नहीं देगा क्योंकि इसे टाइप पैरामीटर पसंद नहीं है।
इस विशेष मामले में, विशेषता-आधारित कॉन्फ़िगरेशन घोषणात्मक दृष्टिकोण से अधिक उपयोगी होगा, इसलिए मैं अपने कॉन्फ़िगरेशन विशेषताओं को छोड़ना नहीं चाहता (जो मुझे टाइप करने के लिए आईसीओफ़िगरेशन एक्सेसर को बदलने और फ़ैक्टरी दृष्टिकोण पर स्विच करने की अनुमति देगा)।
मैं डीएसएल भी सोच रहा था। मुझे इन पंक्तियों के साथ कुछ के बारे में सोचना है, लेकिन आप इसमें अनपेक्षित डीएसएल के एक टुकड़े के साथ एक विशेषता के साथ समाप्त होता है, जो व्यर्थ है। –