2013-03-26 10 views
18

में ऑटोफैक का उपयोग करके HttpContextBase इंजेक्ट करने के लिए कैसे मैं ASP.MVC 4 और Autofac का उपयोग कर रहा हूं।एएसपी.नेट एमवीसी 4

मैं अपने global.asax.cs फ़ाइल में निम्न पंजीकृत किया है: एक साथ ठीक उसी कोड

private readonly HttpContextBase httpContext; 

public HomeController(HttpContextBase httpContext) 
{ 
    this.httpContext = httpContext; 
} 

मैं प्रयोग किया है:

ContainerBuilder builder = new ContainerBuilder(); 

builder.Register(c => c.Resolve<HttpContextBase>().Request) 
    .As<HttpRequestBase>() 
    .InstancePerHttpRequest(); 
builder.Register(c => c.Resolve<HttpContextBase>().Response) 
    .As<HttpResponseBase>() 
    .InstancePerHttpRequest(); 
builder.Register(c => c.Resolve<HttpContextBase>().Server) 
    .As<HttpServerUtilityBase>() 
    .InstancePerHttpRequest(); 
builder.Register(c => c.Resolve<HttpContextBase>().Session) 
    .As<HttpSessionStateBase>() 
    .InstancePerHttpRequest(); 

builder.RegisterControllers(Assembly.GetExecutingAssembly()); 

builder.RegisterType<WebWorkContext>().As<IWorkContext>().InstancePerHttpRequest(); 

मेरे घर नियंत्रक में मैं इस (सिर्फ परीक्षण प्रयोजनों के लिए) है एएसपी.नेट एमवीसी 3 प्रोजेक्ट और यह ठीक काम करता है। अब इस परियोजना में मुझे त्रुटियां मिल रही हैं। यकीन नहीं है कि क्यों? त्रुटि है कि मैं हो रही है:

कंस्ट्रक्टर्स में से कोई भी प्रकार पर 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' के साथ मिला 'MyProject.Web.Controllers.HomeController' उपलब्ध सेवाओं और मानकों के साथ लागू किया जा सकता है : कन्स्ट्रक्टर 'शून्य .ctor (System.Web.HttpContextBase) के पैरामीटर' System.Web.HttpContextBase httpContext 'को हल नहीं कर सकता। Autofac.Core.Activators.Reflection.ReflectionActivator.ActivateInstance (IComponentContext संदर्भ, IEnumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.Activate(IEnumerable 1 पैरामीटर) Autofac.Core.Resolving.InstanceLookup.Execute() पर Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance (ISharingLifetimeScope currentOperationScope, IComponent पंजीकरण पंजीकरण, Autofac.Core.Registration.ExternalRegistrySource पर IENumerable 1 parameters) at Autofac.Core.Resolving.InstanceLookup.ResolveComponent(IComponentRegistration registration, IEnumerable 1 पैरामीटर)। <

मुझे यकीन नहीं है कि यह क्यों काम नहीं करेगा? क्या मुझे एएसपी.नेट 4 में चीजों को अलग-अलग करने की ज़रूरत है?

मेरे पास एक अलग परियोजना है जिसमें मैं HttpContextBase इंजेक्ट करना चाहता हूं और मुझे एक ही त्रुटि मिल रही है।

+3

मैं आपके कोड में नहीं देखता हूं, जहां आप 'HttpContextBase' को पंजीकृत करते हैं ... 'builder.RegisterModule (नया AutofacWebTypesModule()) के साथ' AutofacWebTypesModule' को पंजीकृत करने का प्रयास करें; ' – nemesv

+0

हाँ मैंने अभी यह देखा है उनकी वेबसाइट पर। मैं 'निर्माता' करने से पहले 'AutofacWebTypesModule' पहले पंजीकरण करता हूं। रजिस्ट्रार (सी => सी। रिसोलव () अनुरोध) '..? –

+0

मैं इस मामले में पंजीकरण आदेश से कोई फर्क नहीं पड़ता। – nemesv

उत्तर

30

nemesv पर धन्यवाद। ...

builder.Register(c => c.Resolve<HttpContextBase>().Request) 
    .As<HttpRequestBase>() 
    .InstancePerHttpRequest(); 
builder.Register(c => c.Resolve<HttpContextBase>().Response) 
    .As<HttpResponseBase>() 
    .InstancePerHttpRequest(); 
builder.Register(c => c.Resolve<HttpContextBase>().Server) 
    .As<HttpServerUtilityBase>() 
    .InstancePerHttpRequest(); 
builder.Register(c => c.Resolve<HttpContextBase>().Session) 
    .As<HttpSessionStateBase>() 
    .InstancePerHttpRequest(); 

बस के साथ:

builder.RegisterModule(new AutofacWebTypesModule()); 

अब यह काम करता है

मैं जगह समाप्त हो गया। निश्चित नहीं है कि अंतर क्या है लेकिन मॉड्यूल में कोड बिल्कुल ऊपर जैसा ही दिखता है।

+15

यदि आप [AutofacWebTypesModule] के स्रोत कोड की जांच करते हैं (https://code.google.com/p/autofac/source/browse/src/Source/Autofac.Integration.Web.Mvc3/AutofacWebTypesModule.cs?r=94f70ab10f4d65991c600e2e80171ce4847589e6) आप देख सकते हैं कि आपने सबसे महत्वपूर्ण लाइन 'बिल्डर' रजिस्ट्रार (सी => नया एचटीपी कोंटेक्स्टवापर (एचटीपी कॉनटेक्स्ट.क्यूरेंट)) है। () .InstancePerHttpRequest(); 'जो' HttpContextBase 'को पंजीकृत करता है – nemesv

+0

आपकी मदद के लिए धन्यवाद। –

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