2011-12-02 8 views
6

मैं इसHttpcontext.Session Application_Start विधि में कहा जाता है Ninject

private void RegisterDependencyResolver() 
{ 
    HttpContextBase context = new HttpContextWrapper(HttpContext.Current); 
    var kernel = new StandardKernel(); 
    kernel.Bind<ISession>().To<SessionService>() 
          .InRequestScope() 
          .WithConstructorArgument("context", ninjectContext => context); 

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
} 

RegisterDependencyResolver तरह Ninject का उपयोग कर HttpContext इंजेक्शन लगाने हूँ() के साथ अशक्त हमेशा होता है।

यह इंटरफ़ेस सत्र को संभालने वाली कक्षा के निर्माता में इंजेक्शन दिया जाता है।

समस्या यह है कि सत्र कभी शुरू नहीं हुआ है इसलिए मैं इसमें कुछ भी जोड़ नहीं सकता।

context.session ["something"] = "something" जैसे कोई भी कोड एक शून्य संदर्भ अपवाद उठाता है।

क्या एप्लिकेशन_ जीवन चक्र में बहुत जल्दी है? मैंने सोचा .InequequestScope() इसे ठीक करता है लेकिन यह मेरे लिए काम नहीं करता है।

+0

वहाँ एक सत्र जब आवेदन शुरू होता नहीं है। – Amy

+0

https://github.com/ninject/ninject.web.mvc/blob/Maintenance_2.2/mvc3/src/Ninject.Web.Mvc/Bootstrapper.cs पंक्तियां देखें: 68 और 69 –

उत्तर

9

यदि आप आईआईएस एकीकृत मोड में चल रहे हैं तो आपके पास Application_Start में किसी भी एचटीपी संदर्भ वस्तु तक पहुंच नहीं है।

इस तरह का प्रयास करें:

private void RegisterDependencyResolver() 
{ 
    kernel 
     .Bind<ISession>() 
     .To<SessionService>() 
     .InRequestScope() 
     .WithConstructorArgument(
      "context", 
      ninjectContext => new HttpContextWrapper(HttpContext.Current) 
     ); 

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
} 

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

  • कोई संबंधित समस्या नहीं^_^