5

का उपयोग कर Asp.net MVC 4 जाल एपीआई नियंत्रक में निर्भरता सम्मिलित करें नहीं कर सकता मैं, asp.net वेब एपीआई के साथ विंडसर कंटेनर कॉन्फ़िगर करने में असमर्थ हूँ, हालांकि यह नियमित नियंत्रक (IController) के साथ ठीक काम कर रहा।विंडसर कंटेनर

मैं नियमित रूप से नियंत्रक और एक ही परियोजना में एपीआई नियंत्रक की है।

/// <summary> 
    /// Controller Factory class for instantiating controllers using the Windsor IoC container. 
    /// </summary> 
    public class WindsorControllerActivator : IControllerActivator 
    { 
     private readonly IWindsorContainer container; 
     public WindsorControllerActivator(IWindsorContainer container) 
     { 
      this.container = container; 
     } 
     public IController Create(RequestContext requestContext, Type controllerType) 
     { 
      var controller = (IController)container.GetService(controllerType); 
      return controller; 
     } 

} 

और global.asax.cs

container.Register(Component.For<IWindsorContainer>().Instance(container)); 
    container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>()); 

और नीचे समस्याग्रस्त कोड है में:

public class WindsorApiControllerActivator : IHttpControllerActivator 
    { 
     private readonly IWindsorContainer container; 
     public WindsorApiControllerActivator(IWindsorContainer container) 
     { 
      this.container = container; 
     } 
     public IHttpController Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
     { 
      var controller = (IHttpController)container.GetService(controllerType); 
      return controller; 
     } 
    } 

यहाँ जो ठीक काम कर रहा नियमित नियंत्रक के लिए कोड है और संस्थापक:

container.Register(Component.For<IHttpControllerActivator>().ImplementedBy<WindsorApiControllerActivator>()); 

हालांकि, मैं WindsorApiControllerActivator निष्पादित करने में सक्षम कभी नहीं हूँ।

, जब मैं विंडसर कंट्रोलर एक्टिवेटर में डीबगर डालता हूं तो यह अपेक्षा के अनुसार काम करता है, लेकिन विंडसर एपी कंट्रोलर एक्टिवेटर के लिए इसे कभी भी निष्पादित नहीं किया जाता है।

आपकी मदद की सराहना की जाएगी

+0

आप dependencyresolver के रूप में अपने कंटेनर पंजीकरण कैसे कर सकता हूँ? – nemesv

+0

आप WindsorApiControllerActivator को क्यों अनुकूलित करते हैं जबकि मुझे कोई विशेष उपचार नहीं दिख रहा है? –

+0

क्यूओंग ले: क्योंकि मैं एपीआई नियंत्रकों में निबर्ननेट सत्र ऑब्जेक्ट का उपयोग कर रहा हूं
सार्वजनिक आइसियान एनएसशन {प्राप्त करें; सेट; } सार्वजनिक VendorController (ISession सत्र) { n सत्र समाप्त = सत्र; } // प्राप्त API/ [HttpPost] सार्वजनिक IList खोज (SearchViewModel मॉडल) { IList searchResultViewModels = SearchVenues (मॉडल); वापसी की खोजResultViewModels; // वापसी "हैलो वर्ल्ड"; } –

उत्तर

1

मैं global.asax.cs में निम्नलिखित कोड जोड़ा, और यह काम करता है :)

_windsorContainer = new WindsorContainer(); 
    _windsorContainer.Install(new EventSorbetInstaller()); 
    DependencyResolver.SetResolver(new WindsorDependencyResolver(_windsorContainer)); 
    ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_windsorContainer)); 
    RegisterFilterProviders(FilterProviders.Providers, _windsorContainer); 

    var activator = _windsorContainer.Resolve<IHttpControllerActivator>(); 

    GlobalConfiguration.Configuration.Services.Replace(typeof(IHttpControllerActivator), activator); 
0

तुम बहुत w Windosr के लिए एक IDependencyResolver उपयोग करने के लिए सावधान किया जाना चाहिए/o decomissiong/रिलीज चिंता।

इस कार्यान्वयन http://nikosbaxevanis.com/2012/06/04/using-the-web-api-dependency-resolver-with-castle-windsor-part-2/ मैं अभी तक यह कोशिश नहीं की करने के लिए एक नज़र है, लेकिन यह w/वर्तमान WebAPI रिहाई जाना

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