5

Ich kann Windsor Container mit ASP.net Web API nicht konfigurieren, obwohl es mit regulären Controller (IController) funktioniert.Kann keine Abhängigkeiten in Asp.net MVC 4 Web API Controller mit Windsor Container injizieren

Ich habe reguläre Controller und API-Controller in demselben Projekt. Hier

ist der Code für normale Steuerung, die feinen Arbeiten:

/// <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; 
     } 

} 

und in global.asax.cs

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

und unten ist die problematische Code:

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; 
     } 
    } 

und Installateur:

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

jedoch kann ich WindsorApiControllerActivator nie ausführen.

wenn, ich legte Debugger in WindsorControllerActivator es funktioniert wie erwartet, aber für WindsorApiControllerActivator es nie ausgeführt werden.

Ihre Hilfe wird geschätzt werden

+0

Wie registrieren Sie Ihren Container als den dependencyresolver? – nemesv

+0

Warum passen Sie WindsorApiControllerActivator an, während ich keine spezielle Behandlung sehe? –

+0

Cuong le: weil ich Nhibernate Session-Objekt in den API-Controllern
öffentlichen ISession NSession {get; einstellen; } public VendorController (ISession-Sitzung) { NSession = Sitzung; } // GET api/ [Httppost] public IList Suche (SearchViewModel Modell) { IList searchResultViewModels = SearchVenues (Modell); return searchResultViewModels; // zurück "Hallo Welt"; } –

Antwort

1

ich den folgenden Code in global.asax.cs hinzugefügt, und es funktioniert :)

_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);