2017-05-22 1 views
2

Unity 또는 StructureMap과 같은 타사 라이브러리를 사용하지 않고 ASP.NET 웹 API에서 종속성 주입 (사용자 지정 생성자)을 수행 할 수 있는지 여부를 알고 싶습니다. . 난 당신이 DefaultControllerFactory에서 상속 후 GetControllerInstance 기능을 재정 의하여 사용자 정의 ControllerFactory을 할 수 MVC 알고ASP.NET 웹 API 종속성 주입

public Controller(IDatabaseConnector connector) { ... } 

: 내가 달성하고자하는 어떤

같은 생성자와 컨트롤러가 있습니다. 그래서 나는 웹 API에 대한 대안이 있다고 확신한다.

+0

웹 API의 'IDependencyResolver'에 대한 정보 . MVC는 같은 이름의 웹 API를 가지고 있기 때문에 Web API 용인지 확인하십시오. – Nkosi

+1

나는 IHttpControllerActivator에서 상속을 끝내고 저를위한 트릭을했습니다. – Tyrone

+0

asp 코어를 테스트 할 때 샘플 페이지에 종속성 주입이있었습니다. https://msdn.microsoft.com/en-us/magazine/mt703433.aspx –

답변

1

먼저 자신의 IHttpControllerActivator 정의해야합니다에서 : 지금 당신은 사용할 수 있습니다에게

protected void Application_Start() 
{ 
    // ... 

    GlobalConfiguration.Configuration.Services.Replace(
     typeof(IHttpControllerActivator), 
     new CustomControllerActivator()); 
} 

리치 Controller 생성자 : 다음 Global.asax

public class CustomControllerActivator : IHttpControllerActivator 
{ 
    public IHttpController Create(
     HttpRequestMessage request, 
     HttpControllerDescriptor controllerDescriptor, 
     Type controllerType) 
    { 
     // Your logic to return an IHttpController 
     // You can use a DI Container or you custom logic 
    } 
} 

이 그럼 당신은 교체해야 기본 활성제를

public class UserController 
{ 
    public UserController(
     IMapper mapper, 
     ILogger logger, 
     IUsersRepository usersRepository) 
    { 
     // ... 
    } 

    // ... 
} 
+0

내 게시물에 대한 내 의견에서 볼 수 있듯이 이미이 작업을 수행했지만 여전히 도움을 주셔서 감사합니다! +1 – Tyrone