15

मैं इन दो तरीकों के बीच अंतर के रूप में उत्सुक हूं। मैं खुले जेनेरिक के साथ एक सजावटी पैटर्न को कार्यान्वित कर रहा हूं और क्या मैं AddAllTypesOf या ConnectImplementationsToTypesClosing का उपयोग करता हूं, इससे कोई फर्क नहीं पड़ता, मुझे वही कार्यक्षमता मिलती है।AddAllTypesOf बनाम कनेक्टिमेंट्स ToTypes बंद करना

public class CommandRegistry : Registry 
    { 
     public CommandRegistry() 
     { 

      For<CommandProcessor>().Use<DefaultCommandProcessor>().Transient(); 

      Scan(scanner => 
      { 
       scanner.AssemblyContainingType<SaveCoolCommandHandler>();      

       //scanner.AddAllTypesOf(typeof(CommandHandler<>)); 
       //scanner.AddAllTypesOf(typeof(IValidator<>)); 
       //scanner.AddAllTypesOf(typeof(LogMehh<>)); 

       scanner.ConnectImplementationsToTypesClosing(typeof(CommandHandler<>)); 
       scanner.ConnectImplementationsToTypesClosing(typeof(IValidator<>)); 
       scanner.ConnectImplementationsToTypesClosing(typeof(LogMehh<>)); 
      }); 

      var handlerType = For(typeof(CommandHandler<>)); 

      handlerType.DecorateAllWith(typeof(CommandValidator<>)); //Second 
      handlerType.DecorateAllWith(typeof(CommandLogger<>)); //First 

      // ObjectFactory.WhatDoIHave(); 
     } 
    } 

ObjectFactory.WhatDoIHave() करने के लिए कॉल भी मुझे एक ही परिणाम कोई फर्क नहीं पड़ता कि कौन सी विधि मैं चुन देता है।

मैंने स्रोत कोड को देखा है और ये विधियां निश्चित रूप से अलग-अलग चीजें कर रही हैं, मैं बस यह निर्धारित करने में सक्षम नहीं हूं कि अंतर क्या है। क्या कोई दिशा-निर्देश या परिदृश्य हैं जब किसी को दूसरे पर पसंद किया जाता है?

उत्तर

3

चेतावनी: मैंने कई वर्षों से एक वाणिज्यिक परियोजना में स्ट्रक्चर मैप का उपयोग नहीं किया है। तब से चीजें बदल सकती हैं, लेकिन आपका उदाहरण कोड पूरी तरह से परिचित दिखता है, इसलिए मुझे लगता है कि यह ज्यादा नहीं बदला है।

एकमात्र कारण मुझे पता है कि आप कहां से एक दूसरे के पक्ष में रहना चाहते हैं, जब आप स्पष्ट रूप से सम्मेलन को परिभाषित करना चाहते हैं जिसका उपयोग कंक्रीट कार्यान्वयन को T पर मैपिंग के लिए किया जाएगा। दोनों इसे कर सकते हैं लेकिन कार्यान्वयन की मजबूती अलग-अलग होती है।

यदि आप का उपयोग करते हैं, तो Scan() सेटअप के दौरान आप IRegistrationConvention से प्राप्त एक कॉन्फ़्रेंस क्लास में जाते हैं। मेरे लिए कम से कम यह किसी भी परेशानी के बिना काम किया।

AddAllTypesOf<T> माना जाता है कि ITypeScanner के माध्यम से इसी तरह की सुविधा है, लेकिन व्यवहार में हम प्रकार पंजीकृत नहीं हो रही है एक अलग नाम स्थान में यदि T से, और अक्सर विशिष्ट कार्यान्वयन वे वाले थे नहीं मिल डुप्लिकेट प्रकार पंजीकरण की तरह इसके साथ अजीब मुद्दों के सभी प्रकार था, सेवा मेरे। ConnectImplementationsToTypesClosing<T> का उपयोग करते समय ये समस्याएं चली गईं।

यदि आप कुछ भी चालाक करने की कोशिश नहीं कर रहे हैं और डिफ़ॉल्ट सम्मेलन आपके लिए काम करते हैं, तो आपको दोनों के बीच कोई अंतर नहीं दिखना चाहिए। यदि आपको किसी भी कारण से डिफ़ॉल्ट सम्मेलनों को ओवरराइड करने की आवश्यकता है तो मैं दृढ़ता से ConnectImplementationsToTypesClosing<T> का पक्ष लेगा।

+0

ग्रेट उत्तर, यह दिलचस्प है, मैं उन परिदृश्यों को नए संस्करणों के साथ आज़माउंगा और देखें कि क्या होता है। – CSharper

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