0

아래는 Windsor Castle을 사용하여 인스턴스화하려는 컨트롤러의 코드입니다.Castle Windsor를 사용하여 MVC 5 웹 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 용 컨트롤러 팩토리를 등록했지만 웹 API가 다른 인터셉트 포인트를 가지고 있다는 것입니다. Web API DependencyResolver를 등록해야합니다. – Steven

+0

당신은 @ Steven입니다. 도와 주셔서 감사합니다. –

답변

0

Mark Seemann이 쓴 WEB API에 관한 모든 기사를 반드시 읽으십시오. here을 시작한 다음 웹 API here에 대한 아카이브를 트래버스 할 수 있습니다.

첫 번째 기사를 읽은 다음 보관소를 탐색하십시오. 모든 것이 여기에 있습니다.