5

Tôi không thể cấu hình Windsor Container với api web asp.net, mặc dù nó hoạt động tốt với bộ điều khiển thông thường (IController).Không thể tiêm Dependencies vào Asp.net MVC 4 Web API Controller sử dụng Windsor Container

Tôi có bộ điều khiển thông thường và bộ điều khiển api trong cùng một dự án.

Đây là mã cho điều khiển thông thường mà làm việc tốt:

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

} 

và trong global.asax.cs

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

và dưới đây là đoạn code có vấn đề:

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

và trình cài đặt:

Tuy nhiên, năm

tuy nhiên, tôi không bao giờ có thể thực thi WindsorApiControllerActivator.

khi nào, tôi đặt trình gỡ lỗi trong WindsorControllerActivator nó hoạt động như mong đợi, nhưng đối với WindsorApiControllerActivator nó không bao giờ được thực thi.

giúp đỡ của bạn sẽ được đánh giá

+0

Làm cách nào để bạn đăng ký vùng chứa của mình với tư cách là người phụ thuộc? – nemesv

+0

Tại sao bạn tùy chỉnh WindsorApiControllerActivator trong khi tôi không thấy bất kỳ điều trị đặc biệt nào? –

+0

Cường le: vì tôi sử dụng đối tượng Nhibernate Session trong bộ điều khiển api
public ISession NSession {get; bộ; } công khai VendorController (phiên ISession) { NSession = phiên; } // GET api/ [HttpPost] công IList Search (SearchViewModel mô hình) { IList searchResultViewModels = SearchVenues (mô hình); trả về tìm kiếmResultViewModels; // trả về "Hello World"; } –

Trả lời

1

tôi đã thêm đoạn mã sau vào global.asax.cs, và nó hoạt động :)

_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); 
Các vấn đề liên quan