0

下面是我想使用Windsor Castle實例化的控制器的代碼。無法在使用Castle Windsor的MVC 5 Web API項目中執行依賴項注入

public class TestController : ApiController 
{ 
    private ITestService _testService = null; 

    public TestController(ITestService testService) 
    { 
     _testService = testService; 
    } 

    public IList<TestClass> Get() 
    { 
     IList<TestClass> testObjects = _testService.GetAll().ToList(); 
     return testObjects; 
    } 
} 

我已經寫在以下代碼的Global.asax.cs

protected void Application_Start() 
    { 
     ........................ 

     InitializeServiceLocator(); 
    } 

    private static void InitializeServiceLocator() 
    { 
     _container = new WindsorContainer().Install(FromAssembly.This()); 

     var controllerFactory = new WindsorControllerFactory(_container.Kernel); 
     ControllerBuilder.Current.SetControllerFactory(controllerFactory); 
    } 

這裏是=>

public class ControllerInstaller : IWindsorInstaller 
{ 
    public void Install(IWindsorContainer container, IConfigurationStore store) 
    { 
     if (container == null) 
     { 
      throw new ArgumentNullException("container"); 
     } 

     if (store == null) 
     { 
      throw new ArgumentNullException("store"); 
     } 
     //All MVC controllers 
     container.Register(Classes.FromThisAssembly().BasedOn<IHttpController>().LifestylePerWebRequest()); 

     AddComponentsTo(container); 
    } 

    private void AddComponentsTo(IWindsorContainer container) 
    { 
     container.Register(
      ///DBContext 
      Component.For<DbContext>().ImplementedBy<SCFEntities>().LifestyleTransient()); 

     container.Register(
          Classes.FromAssemblyNamed("MyProject.ApplicationServices").Pick().WithService.DefaultInterfaces().LifestylePerWebRequest(), 
      Classes.FromAssemblyNamed("MyProject.Data").Pick().WithService.DefaultInterfaces().LifestylePerWebRequest()); 
    } 
} 

是不產生問題的控制器實例爲安裝程序的代碼使用參數化的構造函數。它期望一個無參數的構造函數。有人能指出我要去哪裏嗎?謝謝。

+4

問題是您爲MVC註冊了一個控制器工廠,但Web API具有不同的攔截點。您需要註冊Web API DependencyResolver。 – Steven 2014-10-28 13:33:50

+0

你是對的@Steven。感謝幫助。 – 2014-10-29 06:53:16

回答

0

請務必閱讀Mark Seemann撰寫的關於WEB API的所有文章。 您可以開始here,然後遍歷Web API here的存檔。

閱讀第一篇文章,然後遍歷存檔。一切都在這裏。

相關問題