Nie mogę skonfigurować Windsor Container z ap.net web api, chociaż działa dobrze z regularnym kontrolerem (IController).Nie można wstrzyknąć zależności w Asp.net MVC 4 Web API Controller przy użyciu Windsor Container
Mam regularny kontroler i kontroler api w tym samym projekcie.
Oto kod do regularnego kontroler, który działa bez zarzutu:
/// <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;
}
}
aw Global.asax.cs
container.Register(Component.For<IWindsorContainer>().Instance(container));
container.Register(Component.For<IControllerActivator>().ImplementedBy<WindsorControllerActivator>());
i poniżej jest kod problematyczne:
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;
}
}
i instalator:
container.Register(Component.For<IHttpControllerActivator>().ImplementedBy<WindsorApiControllerActivator>());
Jednak ja nigdy nie jestem w stanie wykonać WindsorApiControllerActivator.
Kiedy umieścić debugger w WindsorControllerActivator działa zgodnie z oczekiwaniami, ale dla WindsorApiControllerActivator nigdy nie zostanie wykonany.
Twoja pomoc będzie mile widziane
Jak zarejestrować swój kontener jako zależność? – nemesv
Dlaczego dostosowujesz WindsorApiControllerActivator, ale nie widzę specjalnego traktowania? –
Cuong le: ponieważ korzystam z obiektu Nhibernate Session w kontrolerach api [HttpPost] publicznych IList wyszukiwania (wzór SearchViewModel) { IList searchResultViewModels = SearchVenues (model); return searchResultViewModels; // return "Hello World"; } –
public NSession {get; zestaw; } public VendorController (sesja ISession) { NSession = sesja; } // GET API/