मैं सरल इंजेक्टर का उपयोग कर रहा हूं, लेकिन शायद मुझे जो चाहिए वह एक वैचारिक उत्तर है। एक आम तौर पर, एक वर्ग जो IApplicationSettings लागू करता है के लिए होता है एक निर्दिष्ट स्रोत से प्रत्येक क्षेत्र में हो रही, उदाहरण के लिएनिर्भरता इंजेक्शन का उपयोग कैसे करें, एकाधिक स्रोतों से कॉन्फ़िगरेशन प्राप्त करें?
public interface IApplicationSettings
{
bool EnableLogging { get; }
bool CopyLocal { get; }
string ServerName { get; }
}
फिर,:
यहाँ सौदा है, मैं अपने आवेदन सेटिंग्स के साथ एक अंतरफलक है लगता है
public class AppConfigSettings : IApplicationSettings
{
private bool? enableLogging;
public bool EnableLogging
{
get
{
if (enableLogging == null)
{
enableLogging = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableLogging"];
}
return enableLogging;
}
}
...
}
हाउवर! मान लें कि मैं app.config से EnableLogging
, डेटाबेस से CopyLocal
, और ServerName
को अन्य कार्यान्वयन से प्राप्त करना चाहता हूं जो वर्तमान कंप्यूटर नाम प्राप्त करता है। मैं 9 एन्क्रिप्शन बनाने के बिना अपने एप कॉन्फ़िगरेशन को मिश्रित करने में सक्षम होना चाहता हूं, प्रत्येक संयोजन के लिए एक।
मुझे लगता है कि मैं किसी भी पैरामीटर को पार नहीं कर सकता क्योंकि इंटरफेस इंजेक्टर (कंटेनर) द्वारा हल किया जाता है।
मैं इस के बारे में सोचा, शुरू में:
public interface IApplicationSettings<TEnableLogging,TCopyLocal,TServerName>
where TEnableLogging : IGetValue<bool>
where TCopyLocal : IGetValue<bool>
where TServerName : IGetValue<string>
{
TEnableLogging EnableLog{get;}
TCopyLocal CopyLocal{get;}
TServerName ServerName{get;}
}
public class ApplicationSettings<TEnableLogging,TCopyLocal,TServerName>
{
private bool? enableLogging;
public bool EnableLogging
{
get
{
if (enableLogging == null)
{
enableLogging = Container.GetInstance<TEnableLogging>().Value
}
return enableLogging;
}
}
}
हालांकि, इस के साथ मैं एक मुख्य समस्या है: मुझे कैसे पता TEnableLogging
का एक उदाहरण (जो एक IGetValue<bool>
है) बनाने के लिए कैसे करते हैं? ओह, मान लें कि IGetValue<bool>
एक इंटरफ़ेस है जिसमें एक वैल्यू प्रॉपर्टी है, जिसे कंक्रीट क्लास द्वारा कार्यान्वित किया जाएगा। लेकिन कंक्रीट क्लास को कुछ विनिर्देशों की आवश्यकता हो सकती है (जैसे app.config में कुंजी का नाम क्या है) या नहीं (मैं बस हमेशा सच करना चाहता हूं)।
मैं अपेक्षाकृत इंजेक्शन के लिए अपेक्षाकृत नया हूं, इसलिए शायद मैं गलत तरीके से सोच रहा हूं। क्या किसी को यह पूरा करने के बारे में कोई विचार है?
(आप एक और डि लाइब्रेरी का उपयोग कर का जवाब हो सकता है, मुझे कोई आपत्ति नहीं होगा। मुझे लगता है कि मैं सिर्फ यह की अवधारणा को आकर्षित करने की जरूरत है।)
धन्यवाद, उस अर्थ का एक बहुत बनाया! दिलचस्प है कि हम दोनों ने समान कदम उठाए और महसूस किया कि जिस तरह से यह हाहा होना चाहिए –