컨트롤러 작업을 인터페이스에 바인딩하려고하지만 여전히 기본 바인딩 동작을 유지하려고합니다.인터페이스에 웹 API 모델 바인딩
는public class CoolClass : ISomeInterface
{
public DoSomething {get;set;} // ISomeInterface
}
public class DosomethingController : ApiController
{
public HttpResponseMessage Post(ISomeInterface model)
{
// do something with model which should be an instance of CoolClass
}
}
내 서비스의 소비자는 그래서 그들이 내 의견에 해킹 될 전달하는 JSON에 "$ 유형"을 추가 할 필요 CoolClass 아무것도 모른다. 서비스에서 처리 할 수 있기를 바랍니다. CoolClass를 동작 매개 변수로 지정하면 올바르게 작동합니다.
편집 : 그래서 여기 내 질문에 부분 솔루션을 발견 Dependency injection for ASP.NET Web API action method parameters하지만 거기에 후속 문제가 있습니다. 이 솔루션은 인터페이스 속성을 해결하지 못합니다. 아래 예를 참조하십시오.
IConcreteClass는 해결되지만 ISubtype은 해결되지 않습니다.
public class SubConcreteClass : ISubtype
{
// properties
}
public class ConcreteClass : IConcreteClass
{
public ISubtype Subtype {get;set;}
}
미디어 포맷터가 IConcreteClass에서 유형을 확인할 수있는 것으로 확인되면 전체 스트림을 읽습니다. 따라서 인터페이스 멤버를 해결할 수있는 기회가 없다고 생각합니다.
는, 비슷한 질문 [_here_] (HTTP에 내 대답을 체크 아웃입니다 : // http://www.google.com/support/bin/answer.py?answer=14124189/can-i-pass-an-interface-based-object-to-an-mvc-4-webapi-post/22279204#22279204). –