क्या स्ट्रक्चर मैप का वर्तमान संस्करण एएसपी .NET वेब एपीआई, एमवीसी 4 और .NET Framework 4.5 का समर्थन करता है?संरचना मैप और एएसपी नेट वेब एपीआई और नेट फ्रेमवर्क 4.5
उत्तर
जैसा कि here उल्लिखित है, वेब एपीआई एक निर्भरता रिज़ॉल्वर का उपयोग करता है।
class StructureMapDependencyResolver : IDependencyResolver
{
public IDependencyScope BeginScope()
{
return this;
}
public object GetService(Type serviceType)
{
return ObjectFactory.GetInstance(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return ObjectFactory.GetInstances(serviceType);
}
public void Dispose()
{
}
}
और अपने Global.asax.cs में, निर्भरता समाधानकर्ता रजिस्टर करने के लिए इस लाइन में शामिल हैं:
GlobalConfiguration.Configuration.DependencyResolver = new StructureMapDependencyResolver();
तरफ से
, नए वेब एपीआई बहुत आईओसी कंटेनर के साथ उपयोग करने के लिए आसान है।
मैंने अभी तक इसे नहीं देखा है, लेकिन मुझे लगता है कि BeginScope
विधि जिसे मैंने खाली छोड़ दिया है, बच्चे के कंटेनरों के साथ उपयोग किया जा सकता है।
संपादित करें:
ऊपर कार्यान्वयन काम करता है महान; असल में मैं इसे वैकल्पिक रूप से पसंद करता हूं जिसे मैं आपको बताना चाहता हूं। यह किसी भी प्रकार को स्ट्रक्चर मैप की क्षमताओं के सर्वोत्तम तरीके से हल करेगा और कुछ भी गलत होने पर त्रुटियों को फेंक देगा। मुझे त्रुटियों को देखना पसंद है क्योंकि वे मुझे दिखाते हैं कि मैंने क्या किया है।
हालांकि, एपीआई उम्मीद करता है कि GetService
कुछ गलत होने पर शून्य वापस आ जाएगा।
public object GetService(Type serviceType)
{
if (serviceType.IsAbstract || serviceType.IsInterface)
return ObjectFactory.TryGetInstance(serviceType);
else
return ObjectFactory.GetInstance(serviceType);
}
अंतर यह है कि TryGetInstance
केवल कंटेनर में पंजीकृत प्रकार के लिए लग रहा है और अशक्त वापस आ जाएगी कुछ गलत हो जाता है, तो है: तो एपीआई के अनुरूप होने के, इस सिफारिश कार्यान्वयन है। serviceType.IsAbstract || serviceType.IsInterface
को यह तय करने के लिए पर्याप्त चेक माना जाता है कि किस विधि का उपयोग करना है। मेरा मूल उत्तर सरल और सरल होना था, लेकिन @PHeiberg यहां टिप्पणियों में बताता है कि यह पूरी तरह से "सही" नहीं था। अब जब आपके पास ज्ञान है, जो भी सबसे अच्छा लगता है उसका उपयोग करें।
एएसपी.नेट वेब एपीआई रिलीज संस्करण निर्भरता रिज़ॉल्वर (IDependencyResolver इंटरफ़ेस का कार्यान्वयन) का उपयोग करता है और इसमें नई अवधारणा - निर्भरता क्षेत्र (IDependencyScope इंटरफ़ेस का कार्यान्वयन) भी शामिल है। IDependencyScope को सही ढंग से कार्यान्वित करना महत्वपूर्ण है - यदि सही तरीके से लागू किया गया है, तो यह निर्भरता स्कोप का निपटारा होने पर संसाधनों (स्कोप में बनाया गया) जारी करने की अनुमति देता है। और अनुरोध समाप्त होने पर इसका निपटारा किया जाता है।
पर निर्भरता सबसे अच्छा काम करता है जब कंटेनर नेस्टेड (या बच्चे) कंटेनर का समर्थन करता है। संरचना मैप इसे संस्करण 2.6.1 से करता है। Configuring StructureMap in ASP.NET WebAPI
तुम भी माइक वास्सन से लेख की जाँच कर सकते हैं:: Using the Web API Dependency Resolver
- 1. एएसपी नेट वेब एपीआई आरसी: मेमोरीस्ट्रीम
- 2. आईआईएस 6 और नेट 4.5?
- 3. माइक्रोसॉफ्ट एएसपी नेट जाल एपीआई, MVC 4 और एसपीए वास्तुकला
- 4. WCF बनाम एएसपी नेट जाल एपीआई
- 5. एएसपी नेट वर्ल्डपे एकीकरण
- 6. .नेट फ्रेमवर्क
- 7. कन्स्ट्रक्टर एएसपी नेट
- 8. एएसपी .नेट वर्तमान भौतिक स्थान
- 9. माइक्रोसॉफ्ट नकली और नेट 4.0
- 10. डब्ल्यूपीएफ एप्लीकेशन त्रुटियां और नेट फ्रेमवर्क मरम्मत
- 11. नेट फ्रेमवर्क दस्तावेज स्थान
- 12. .नेट कॉम्पैक्ट फ्रेमवर्क 4.0
- 13. बनाना और नेट
- 14. नेट फ्रेमवर्क 4 पूर्ण और नेट फ्रेमवर्क 4 क्लाइंट प्रोफाइल लक्ष्यीकरण
- 15. वीएस2012 आरटीएम गायब .नेट 4.5 और एमवीसी परियोजना टेम्पलेट्स
- 16. एक नेट फ्रेमवर्क डेवलपर
- 17. नेट फ्रेमवर्क असंगतता मुद्दे
- 18. रुबी और नेट/एसएसएच
- 19. नेट इटरेटर एपीआई
- 20. .नेट एमवीसी, सिलेक्टलिस्ट, और LINQ
- 21. लंबे मतदान को समझना: क्लाइंट (एंड्रॉइड) और सर्वर (एएसपी नेट)
- 22. कस्टम सहायक बनाएं एएसपी नेट MVC 3 और उस्तरा
- 23. नेट वेब सेवा लॉगिंग
- 24. Aldon और नेट विकास
- 25. सी # और नेट
- 26. नेट विकास और प्रक्रिया
- 27. क्या जावा और नेट
- 28. नेट और प्लगइन आर्किटेक्चर
- 29. टोक्यो कैबिनेट और नेट
- 30. नेट और विंडोज
StructureMap निर्भरता संकल्प संभाल नहीं है यहाँ की उम्मीद की तरह
मैं एक लेख वेब एपीआई में StructureMap कॉन्फ़िगर कैसे लिखा था। जेरेमी द्वारा इस उदाहरण और टिप्पणियों को देखें: http://ardalis.com/How-Do-I-Use-StructureMap-with-ASP.NET-MVC-3 – PHeiberg
असल में यह काम करेगा। जेरेमी का कहना है कि 'TryGetInstance' केवल तभी हल हो जाता है जब' सेवा प्रकार 'स्पष्ट रूप से पंजीकृत हो। 'GetInstance' अभी भी उन प्रकारों को हल करेगा जो पंजीकृत नहीं हैं लेकिन ठोस हैं। – kelloti
उदाहरणों का समाधान आपके कोड के साथ काम करेगा। हालांकि मैं प्रस्तावित "बेस्ट प्रैक्टिस" के रूप में पोस्ट किए गए लिंक की व्याख्या करता हूं, क्योंकि जेरेमी स्वयं [इसकी सिफारिश करता है] (http://codebetter.com/jeremymiller/2011/01/23/if-you-are-using-structuremap-with -mvc3-कृपया-पढ़ने के लिए इस /)। मुझे लगता है कि कंटेनर द्वारा टाइप हल करने योग्य नहीं है, तो अपवाद उत्पन्न करने के बजाय GetService विधि को शून्य वापस करना चाहिए। – PHeiberg