5

के साथ कस्टम सदस्यता प्रदाता में इंजेक्ट करें मैंने स्ट्रक्चर मैप के साथ थोड़ा काम किया और मैं अपने नियंत्रक (कन्स्ट्रक्टर इंजेक्शन के माध्यम से) इंटरफ़ेस के लिए एक ठोस प्रकार भंडार में इंजेक्ट करने में कामयाब रहा।स्ट्रक्चर मैप

अब, मुझे अपने कस्टम सदस्यता प्रदाता में एक भंडार प्रकार इंजेक्ट करने की आवश्यकता है। पर कैसे? मेरा कस्टम सदस्यता प्रदाता Membership.Provider.ValidateUser (उदाहरण के लिए) के माध्यम से बनाया गया है।

public class IocControllerFactory : DefaultControllerFactory 
{ 
    protected override IController GetControllerInstance(
     System.Web.Routing.RequestContext requestContext, 
     Type controllerType) 
    { 
     return (Controller) 
      ObjectFactory.GetInstance(controllerType); 
    } 
} 

और Global.asax में, Application_Start() में:

नियंत्रक के लिए मैं इस तरह की एक श्रेणी का निर्माण

//... 
ObjectFactory.Initialize(x => 
{ 
    x.AddRegistry(new ArticleRegistry()); 
} 
            ); 


ControllerBuilder.Current.SetControllerFactory(
    new IocControllerFactory()); 
//... 

लेकिन यह कैसे StructureMap के साथ अपने कस्टम सदस्यता प्रदाता में एक ठोस प्रकार इंजेक्षन?

+0

संभावित डुप्लिकेट [कैसल का उपयोग कर कस्टम सदस्यता प्रदाता में संपत्ति इंजेक्शन] (http://stackoverflow.com/questions/10174636/property-injection-in-custom-membership-provider-using-castle) – Steven

उत्तर

3

मुझे लगता है कि इस मामले में इंजेक्ट करने का कोई तरीका नहीं है।

इंजेक्शन केवल तब काम करता है जब "फैक्ट्री" उदाहरणों को बनाने के लिए आवश्यक है, इंजेक्शन के बारे में जानें, और सदस्यता प्रदाता क्षेत्र दुर्भाग्य से इसकी उम्र दिखा रहा है। जब चीजें अलग-अलग होती थीं तो इसे वापस कोडित किया गया था :)।

आप ASP.NET MVC (संस्करण 2 +) के साथ अपने कस्टम सदस्यता प्रदाता का उपयोग कर रहे हैं, तो आप की तरह DependencyResolver से उसका अनुरोध है कि तुम क्या जरूरत प्राप्त कर सकते हैं:

DependencyResolver.Current.GetService<IRepository<User>>(); 

या आप शायद कर सकता है ऑब्जेक्ट फैक्ट्री का सीधे उपयोग करें।

+0

मुझे समझ में नहीं आता है। मैं इसे अपने कस्टम सदस्यता प्रदाता में उपयोग करता हूं और Global_asax में और कुछ भी नहीं लिखता, Application_Start() में? – Blocked

+0

नहीं, आपको अभी भी अपने कस्टम निर्भरता रिजॉल्वर को एप्लिकेशन_स्टार्ट() में या बूटस्ट्रैप प्रकार वर्ग में निर्भर करना होगा जैसे निर्भरता रीसोलवर .etResolver (नया संरचना मैप निर्भरता रिसेल्वर (कंटेनर)); जहां स्ट्रक्चर मैपडेंसेंसी रेसोलवर आपकी कस्टम क्लास है और कंटेनर आपका स्ट्रक्चर मैप आईकॉन्टेनर है। यहां अधिक जानकारी: http://ericsowell.com/blog/2011/1/20/structuremap-and-asp-net-mvc-3-getting-started – stephenbayer

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