मेरे पास कई कक्षाएं हैं जो ILogger
प्रकार की निर्भरता लेती हैं। ILogger
के कार्यान्वयन प्रकार है जिसके लिए वह लकड़हारा है पता करने के लिए की जरूरत है, यानी Foo
के लिए ILogger
new Logger(typeof(Foo))
हो जाएगा, Bar
के लिए यह new Logger(typeof(Bar))
हो जाएगा, आदिनिर्भरता को हल करने के लिए हल किए जा रहे प्रकार का उपयोग कैसे करें
मैं उचित लकड़हारा एकता द्वारा स्वचालित रूप से इंजेक्ट किया जा चाहते हैं ; दूसरे शब्दों में, जब मैं container.Resolve<Foo>()
पर कॉल करता हूं, तो मुझे Foo
उदाहरण में इंजेक्शन देने के लिए new Logger(typeof(Foo))
चाहिए।
मैं इसे एकता में कैसे स्थापित कर सकता हूं? निर्भरता के प्रकार को हल करने का कोई तरीका है?
(मेरा असली कोड में, मैं वास्तव में एक Create
विधि है, जो भी एक पैरामीटर के रूप में एक प्रकार लेता है। इसलिए मैं सिर्फ अपनी कक्षाओं के लिए कारखाने से निकल सकती है एक ILoggerFactory
है, और वे Create
खुद को कॉल प्राप्त करने के लिए होगा
interface ILogger
{
...
}
class Logger : ILogger
{
private readonly Type _type;
public Logger(Type type)
{
_type = type;
}
...
}
class Foo
{
private readonly ILogger _logger;
public Foo(ILogger logger) // here I want a Logger with its type set to Foo
{
_logger = logger;
}
}
: उचित लकड़हारा, लेकिन ऐसा नहीं मैं प्राप्त करना चाहते हैं)
कुछ कोड के रूप में के रूप में सुंदर बातें स्पष्ट करने का तरीका बताया
यह related question बिल्कुल दिखाता है कि मैं क्या करने की कोशिश कर रहा हूं, और स्वीकार्य उत्तर बिल्कुल वही चीज़ है जो मैं ढूंढ रहा हूं ... लेकिन यह एन इंजेक्ट के लिए है, एकता नहीं।
विल' लकड़हारा = नए लॉगर (GetType()):
और यकीन है कि यह काम कर रहा है कुछ कोड (मैं लकड़हारा करने के लिए एक प्रकार संपत्ति सिर्फ सत्यापित करने के लिए यह ठीक से सेट है जोड़ा) आप?GetType() हमेशा सबसे व्युत्पन्न कक्षा प्रकार देता है। मैं हर जगह टाइपऑफ (कक्षा) पास करता था लेकिन GetType() विधि बिल्कुल वही करता है जो मुझे चाहिए। – Quantic
@Quantic, नहीं, यह नहीं होगा। मेरी कक्षाएं 'ILogger' के कार्यान्वयन को नहीं जानती हैं (जो निर्भरता इंजेक्शन का पूरा बिंदु है), इसलिए वे' लॉगर 'का उदाहरण नहीं बना सकते हैं। मुझे लगता है कि आपने मेरे प्रश्न को गलत समझा, लेकिन कोशिश करने के लिए धन्यवाद;) –
मुझे लगा कि मैंने आपकी प्रतिष्ठा और बैज हेह को देखने के बाद गलती की थी। मैं अपने कोने पर वापस जाऊंगा;) – Quantic