2013-01-03 42 views
5

का उपयोग कर एकाधिक असेंबली से निर्भरता इंजेक्शन मैं डी अवधारणा के लिए नया हूं और स्ट्रक्चरमैप के लिए नया हूं। मैं एक परिदृश्य को भरने की कोशिश कर रहा हूं जहां मेरे सभी इंटरफेस AssemblyA में हैं और मेरे सभी कार्यान्वयन AssemblyB में हैं। मैं Structuremap उपयोग करने के लिए निर्माता में AssemblyB वर्ग जहाँ से AssemblyAस्ट्रक्चरमैप

public class Customer(ICustomerService) 
{ 

} 

ICustomerService इंटरफेस पर निर्भरता है AssemblyA में है और CustomerService वर्ग assemblyB में है के कहने इंजेक्षन करना चाहते हैं। मैं इस कंस्ट्रक्टर में CustomerService उदाहरण इंजेक्ट करने के लिए स्ट्रक्चरमैप चाहता हूं। मुझे लगता है कि यदि वर्ग का नाम इंटरफेस के नाम के समान है और I है। संरचनामैप इसे स्वचालित रूप से पहचान लेगा।

मैंने निम्न कॉन्फ़िगरेशन लिखा है।

x => 
     { 


      x.Scan(scan => 
       { 
        scan.Assembly("AssemblyA"); 
        scan.Assembly("AssemblyB"); 
        scan.TheCallingAssembly(); 
        scan.WithDefaultConventions(); 
      }); 

लेकिन यह मुझे त्रुटि

StructureMap Exception Code: 202 
No Default Instance defined for PluginFamily AssemblyA.ICustomerService, AssemblyA, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 

देता है किसी भी मदद के लिए उपयोगी हो जाएगा। मैं डिफ़ॉल्ट सम्मेलनों का उपयोग करना चाहता हूं और प्रत्येक इंटरफ़ेस को कक्षा में पंजीकृत करने से बचाना चाहता हूं।

धन्यवाद।

उत्तर

1

ठीक है, मुझे यह काम करने के लिए मिला लेकिन अब मैं और भी उलझन में हूं।

इस कोड

IContainer container = new Container(c => 
      { 
       c.Scan(x => 
       { 
        x.Assembly("AssemblyA"); 
        x.Assembly("AssemblyB"); 
        x.IncludeNamespace("AssemblyA"); 
        x.TheCallingAssembly(); 
        x.WithDefaultConventions(); 
       }); 
      }); 

काम करने के लिए यहाँ मैं सरल जोड़ा x.IncludeNamespace ("AssemblyA") है लगता है, असेंबलीबी स्कैन सोचने के बाद कि उसे इस नेमस्पेस की आवश्यकता है और उसने काम करना शुरू कर दिया है।

मेरी समस्या हल हो गई है, लेकिन मुझे नहीं पता कि क्या गलत था या यदि यह जाने का सही तरीका है। किसी भी मदद की अभी भी सराहना की जाएगी।

+0

ठीक है, मैं समझ रहा था कि क्या हो रहा था। मेरे पास कई वर्ग थे जो विभिन्न असेंबली में इंटरफ़ेस को कार्यान्वित कर रहे थे जिन्हें मैं स्कैन कर रहा था। यह उस मूल त्रुटि का उत्पादन करता है जिसे मैंने प्रश्न में बताया था। प्रश्न में मैंने जो कोड पोस्ट किया है, उसे सही ढंग से काम करना चाहिए यदि केवल एक वर्ग है जो सभी स्कैनिंग असेंबली में एसएम के डिफ़ॉल्ट सम्मेलन को पूरा करता है। इससे पहले कि वह इससे पहले न हो, लेकिन उम्मीद है कि इससे किसी को भी उसके सिर पर टक्कर लगी है। जैसे ही मैंने x.IncludeNamespace ("assemblyA") जोड़ा; लाइन मूल रूप से मैंने एसएम के लिए कक्षा असेंबली फ़िल्टर की और यह काम करना शुरू कर दिया :) –

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

  • कोई संबंधित समस्या नहीं^_^