2010-02-18 16 views
5

मेरे पास CoreService प्रोजेक्ट में परिभाषित एक SysMsgManager क्लास निम्न है:संरचना मैप अपवाद: प्लगइनफैमिली के लिए कोई डिफ़ॉल्ट इंस्टेंस परिभाषित नहीं किया गया है

public class SysMsgManager 
{ 
    private ISysMsgRepository _SysMsgRepository; 

    public SysMsgManager() 
    { 
     _SysMsgRepository = ObjectFactory.GetInstance<ISysMsgRepository>(); 
    } 

    .... 
} 

मेरे डेटाएप प्रोजेक्ट में मेरे पास 'ISysMsgRepository' इंटरफ़ेस है और दो ठोस कार्यान्वयन निम्नानुसार परिभाषित हैं:

namespace DataAccess.Repository 
{ 
    [Pluggable("Default")] 
    public class SysMsgRepository : ISysMsgRepository 
    { 
     ... 
    } 
} 

namespace DataAccess.Repository 
{ 
    [Pluggable("Stub")] 
    public class SysMsgRepository_Test : ISysMsgRepository 
    { 
     ... 
    } 
} 

और यही वह है जो मैं मेरी StructureMap.config फ़ाइल

<StructureMap> 

<Assembly Name="CoreService" /> 
<Assembly Name="DataAccess" /> 

<PluginFamily 
    Assembly="DataAccess" 
    Type="DataAccess.Repository.ISysMsgRepository" 
    DefaultKey="Default" /> 

</StructureMap> 

में है जब मैं अपने अनुप्रयोग चलाने के लिए प्रयास करते हैं, मैं निम्नलिखित त्रुटि मिली:

StructureMap अपवाद कोड: 202 \ n कोई डिफ़ॉल्ट उदाहरण PluginFamily DataAccess.Repository.ISysMsgRepository के लिए परिभाषित किया, DataAccess, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = अशक्त

किसी को भी मुझे इस समस्या को हल करने में मदद कर सकते हैं? धन्यवाद!

+0

मैं जानता हूँ कि यह इस विशेष समस्या का हल नहीं है, लेकिन यह सुनिश्चित करते हुए कक्षाओं सार्वजनिक फिक्स कर रहे हैं भी इस त्रुटि – Nick

उत्तर

8

दुर्भाग्यवश मुझे एक्सएमएल के माध्यम से स्ट्रक्चर मैप को कॉन्फ़िगर करने के साथ बहुत कम परिचितता है। मैं आपको दिखाता हूं कि सी # का उपयोग करके यह कैसे किया जाता है।

var container = new Container(config=> 
{ 
    config.For<ISysMsgRepository>().Use<SysMsgRepository>(); 
}); 

यह आपको अपनी अंतरफलक और वर्गों (सिर्फ एक मैं वर्ग के नाम के सामने पर टैकिंग) के लिए मानक नामकरण परंपरा का उपयोग कर रहे है। यदि आप अपने सभी प्रकार के लिए ऐसा करते हैं तो आप इस तरह अपने कंटेनर को कॉन्फ़िगर कर सकते हैं:

var container = new Container(config=> 
{ 
    config.Scan(scan => 
    { 
     scan.TheCallingAssembly(); 
     scan.WithDefaultConventions(); 
    }); 
}); 

मुझे उम्मीद है कि इससे मदद मिलती है। Xml के बजाय कोड का उपयोग करके अपने कंटेनर को कॉन्फ़िगर करना बहुत आसान है। कोशिश करो। आप एक कन्वर्ट होंगे।

+0

मैंने सार्वजनिक SysMsgManager() वर कंटेनर = नए कंटेनर (config => { करने के लिए कोड निम्नलिखित जोड़ा config.For ()। (); } का उपयोग करें); _SysMsgRepository = ObjectFactory.GetInstance (); अभी भी वही त्रुटि मिली है। – sean717

+0

क्या आप मुझे अपना टेस्ट कोड पेस्ट भेज सकते हैं? – KevM

+0

आपकी मदद के लिए धन्यवाद। मैं CastleWindsor में सबकुछ काम कर रहा हूं। मुझे लगता है कि एक बिंदु पर मैं इसे आपके द्वारा पोस्ट किए गए कोड के साथ काम कर रहा हूं। लेकिन मैं अभी भी एक्सएमएल के माध्यम से विन्यास करना चाहता हूँ। – sean717

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