2008-12-11 10 views
38

का उपयोग करने के लिए स्ट्रक्चर मैप बताएं मेरे पास दो सेवाएं हैं जिन्हें XPathDocument की आवश्यकता है। मैं दो सेवाओं की कॉन्फ़िगरेशन में उपयोग करने के लिए XPathDocumnet के नामित उदाहरणों को परिभाषित करने में सक्षम होना चाहता हूं। मैं StuctureMap को बताने में सक्षम होना चाहता हूं जो उपयोग करने के लिए XPathDocument का निर्माता है। जब मैं XPathDocument का उदाहरण प्राप्त करने का प्रयास करता हूं तो यह मुझे बताता है कि यह XmlReader के लिए प्लग किए गए प्रकार को नहीं ढूंढ सकता है। मैं उस कन्स्ट्रक्टर का उपयोग करना चाहता हूं जिसके लिए xml फ़ाइल के लिए स्ट्रिंग यूरी की आवश्यकता होती है। मुझे यह काम करने के लिए प्रतीत नहीं होता है। स्ट्रक्चर मैप कॉन्फ़िगरेशन कोड यहां दिया गया है।एक विशिष्ट कन्स्ट्रक्टर

public class Service1 : IService1 { 
    public Service1(XPathDocument document) {} 
} 
public class Service2 : IService2 { 
    public Service2(XPathDocument document) {} 
} 

public class Registry1 : Registry { 
    ForRequestedType<IService1>().TheDefault.Is.OfConcreteType<Service1>() 
     .CtorDependency<XPathDocument>() 
     .Is(x => x.TheInstanceNamed("XPathDocument1")); 
    ForRequestedType<IService2>().TheDefault.Is.OfConcreteType<Service2>() 
     .CtorDependency<XPathDocument>() 
     .Is(x => x.TheInstanceNamed("XPathDocument2")); 

    ForRequestedType<XPathDocument>().AddInstances(x => { 
     x.OfConcreteType<XPathDocument>() 
      .WithCtorArg("uri").EqualToAppSetting("XmlFile1") 
      .WithName("XPathDocument1"); 
     x.OfConcreteType<XPathDocument>() 
      .WithCtorArg("uri").EqualToAppSetting("XmlFile2") 
      .WithName("XPathDocument2"); 
    }); 
} 
+0

संभावित डुप्लिकेट [स्ट्रक्चर मैप: कोड द्वारा डिफ़ॉल्ट कन्स्ट्रक्टर को कैसे परिभाषित करें?] (Http://stackoverflow.com/questions/289512/structuremap-how-to-define-default-constructor-by-code) –

+3

देखें [ http://stackoverflow.com/questions/289512/structuremap-how-to-define-default-constructor-by-code](http://stackoverflow.com/questions/289512/structuremap-how-to-define-default -constructor-दर-कोड) –

उत्तर

2

this पर देखें। संक्षेप में, आपको OfConcreteType<Service1>() से ConstructedBy(() => new Service1()); को बदलने की आवश्यकता है।

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