मैंने देखा कि जब मैंने NuGet से स्ट्रक्चर मैप को अपने एएसपी.नेट एमवीसी 3 प्रोजेक्ट में स्थापित किया था, डेव इबो के WebActivator पैकेज को निर्भरता के रूप में भी जोड़ा गया था।मैं किस प्रीएप्लिकेशंस स्टार्ट मोड का उपयोग करूँ?
WebActivator समय स्थापित पर जोड़ा बॉयलरप्लेट कोड में एक PreApplicationStartMethod
विशेषता प्रदान करता है और, यह अपने आप कक्षा में आईओसी कंटेनर और निर्भरता समाधानकर्ता आरंभ करने के लिए हैं, तब यह अंदर Global.asax
के Application_Start
विधि करने का प्रयोग किया जाता है।
को देखते हुए ASP.NET 4 पहले से ही है कि अपने स्वयं के System.Web.PreApplicationStartMethodAttribute
कारण है कि यह अपने स्वयं के संस्करणआपूर्ति करने के लिए WebActivator के लिए आवश्यक और StructureMap उपयोग करने के लिए उस के लिए था?
मुझे लगता है कि मैं वेबएक्टिवेटर के संस्करण का उपयोग करने के लिए नहीं कर रहा हूं? डैरिन के लिए
जोड़ा गया कोड: ASP.NET MVC 3 में डि कंटेनरों के लिए
using System.Web;
using System.Web.Mvc;
using StructureMap;
[assembly: WebActivator.PreApplicationStartMethod(
typeof(MyMvcApp.App_Start.StructuremapMvc), "Start")]
// or
[assembly: PreApplicationStartMethod(
typeof(MyMvcApp.App_Start.StructuremapMvc), "Start")]
namespace MyMvcApp.App_Start {
public static class StructuremapMvc {
public static void Start() {
var container = (IContainer) IoC.Initialize();
DependencyResolver.SetResolver(new SmDependencyResolver(container));
}
}
}
मुझे पूरी तरह से यह मिलता है, लेकिन मैं उत्सुक हूं कि स्ट्रक्चर मैप 'WebActivator.PreApplicationStartMethodAttribute' का उपयोग करने के लिए' System.Web.PreAplicationStartMethodAttribute' प्रदान की गई ASP.NET 4 पर क्यों उपयोग करना पसंद करता है। – Kev
@ केव, ऐसा इसलिए है क्योंकि आपके पास प्रति एप्लिकेशन 'System.Web.PreAplicationStartMethodAttribute' हो सकता है और यदि स्ट्रक्चर मैप ने इसका उपयोग किया था, तो आप अब अपनी कस्टम प्रारंभिकरण प्रदान नहीं कर पाएंगे। 'WebActivator.PreAplicationStartMethod' अंतर्निहित ASP.NET 4.0 विशेषता से अधिक विस्तृत है। यह इस पर निर्भर करता है लेकिन यह सभी 'WebActivator.PreAplicationStartMethod' को पंजीकृत करने और उन सभी को निष्पादित करने के लिए प्रतिबिंब का उपयोग करता है। यही कारण है कि NuGet संकुल इस दृष्टिकोण का उपयोग करते हैं। अंतर्निहित विधि को अपहृत करने से बचने के लिए। –
ऐ, लेकिन मुझे माफ़ कर दो अगर मैं थोड़ा मंद महसूस कर रहा हूं, तो स्ट्रक्चर मैप वास्तव में इसका उपयोग नहीं करता है * इसे आरक्षित करने के रूप में * इसलिए कोई अन्य प्रारंभिक कोड जोड़ा नहीं जा सकता है। मेरे प्रश्न में जो कोड जोड़ा गया है उसे देखें। मैं अभी भी 'प्रारंभ()' में अन्य प्रारंभिक कोड जोड़ सकता हूं जो अन्य गैर-संरचना मैप काम करता है। – Kev