2010-09-01 12 views
14

में HttpContext इंजेक्शन मेरी asp.net MVC अनुप्रयोग में मैं एक डि ढांचे के रूप में Ninject उपयोग कर रहा हूँ।Ninject 2

मेरे HttpAccountService मेरी नियंत्रकों द्वारा किया जाता है से और कुकीज़ करने के लिए जानकारी प्राप्त करने के। इसके लिए मुझे HttpAccountService में HttpContext.Current की आवश्यकता है।

kernel.Bind<IAccountService>() 
    .To<HttpAccountService>() 
    .InRequestScope() 
    .WithConstructorArgument("context", HttpContext.Current); 

दुर्भाग्य से यह हमेशा एक ही संदर्भ में जो करता है कि बाद पहली अनुरोध खत्म इस संदर्भ पुराना हो जाता है के लिए बांधता है: इस के रूप में एक निर्भरता मैं इंजेक्शन यह इस तरह के रूप कंस्ट्रक्टर सोचा है।

कैसे मैं सही ढंग से मेरी HttpContext इंजेक्षन चाहिए?

उत्तर

23

WithConstructorArgument एक अधिभार है कि एक Func<NinjectContext,T> लेता है, यानी है, तो आप उपयोग कर सकते हैं:

....WithConstructorArgument("context",ninjectContext =>HttpContext.Current);

जो प्रदान की 'कॉलबैक कॉल करेंगे 'अनुरोध प्रसंस्करण के भीतर लैम्ब्डा और समय पर उस समय सही मूल्य प्राप्त करें [जैसा कि आप दूसरे अधिभार को कॉल करने और निरंतर मूल्य की आपूर्ति करने के विपरीत है Bind<> समय पर गणना की गई]।

+0

वाक्य रचना संकलित करने के लिए प्रतीत नहीं होता है कि (आप संदर्भ उपहास करने के लिए कोशिश नहीं कर रहे हैं, तो मैं तुम्हें यह इनलाइन उपयोग करने पर विचार करेंगे मान)। यह x => HttpContext.Current के साथ संकलित करता है, लेकिन यह अपेक्षित परिणाम प्राप्त नहीं करता है। ऐसा इसलिए हो सकता है क्योंकि मुझे एक (स्थैतिक) कारखाने से मेरा निनजेक्लर मिलता है? –

+0

आगे निरीक्षण पर ऐसा लगता है कि अब मुझे सही संदर्भ मिलता है, लेकिन मेरी समस्या कुछ और झूठ बोलनी चाहिए। रिकॉर्ड के लिए Thx –

+0

: ऐसा इसलिए था क्योंकि एक RedirectToRoute कुकीज़ को अनुरोध करता है। –

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