2012-05-16 9 views
5

जब एक Initialize विधि युक्त एक IoC वर्ग जोड़ा जाता है एक ASP.NET MVC आवेदन करने के लिए StructureMap-MVC3 पैकेज, जोड़ने (कि App_Start फ़ोल्डर में कुछ कोड से बुलाया जाता है) युक्त निम्नलिखित:scan.TheCallingAssembly का प्रयोजन, StructureMap-MVC3 में scan.WithDefaultConventions

public static class IoC 
{ 
    public static IContainer Initialize() 
    { 
     ObjectFactory.Initialize(x => 
      { 
       x.Scan(scan => 
        { 
         scan.TheCallingAssembly(); 
         scan.WithDefaultConventions(); 
        }); 
       // x.For<IExample>().Use<Example>(); 
      }); 
     return ObjectFactory.Container; 
    } 
} 

scan.TheCallingAssembly() और scan.WithDefaultConventions() कोड का उद्देश्य क्या है? मुझे StructureMap documentation में इन तरीकों का एक अच्छा स्पष्टीकरण नहीं दिखाई दे रहा है।

गैर-एमवीसी प्रोजेक्ट में स्ट्रक्चर मैप का उपयोग करते समय मुझे पता चला है कि पूरे x.Scan सेक्शन को बिना किसी प्रभाव के हटाया जा सकता है।

उत्तर

7

स्कैनिंग आपकी असेंबली में परिभाषित सभी प्रकारों को देखती है, और यह निर्धारित करने के लिए स्ट्रक्चर मैप सम्मेलनों को लागू करती है कि कंटेनर में उन्हें कब/कैसे पंजीकृत किया जाना चाहिए।

WithDefaultConventions अर्थ है: "अगर जबकि स्कैनिंग मैं एक अंतरफलक IExample मिल जाए, और एक प्रकार Example कि IExample लागू करता है, तो IExample के लिए डिफ़ॉल्ट प्रकार के रूप में Example रजिस्टर नहीं है"।

कई मामलों में, आप जो कुछ भी ढूंढ रहे हैं उसके लिए कंटेनर से पूछने में सक्षम होंगे (IExample), और यह बिना किसी कॉन्फ़िगरेशन के कार्यान्वयन को वापस कर देगा।