Sto tentando di associare un'azione del controllore a un'interfaccia, mantenendo comunque il comportamento di associazione predefinito.modello Web API che si lega a un'interfaccia
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
}
}
Il consumatore del mio servizio non sa nulla di CoolClass così averli aggiungere "$ tipo" al JSON che sono di passaggio sarebbe un hack a mio parere. Mi piacerebbe essere in grado di gestirlo nel servizio. Se si specifica CoolClass come parametro di azione, funziona correttamente.
EDIT: Quindi ho trovato una soluzione parziale alla mia domanda qui Dependency injection for ASP.NET Web API action method parameters ma c'è un problema di follow-up. Quella soluzione non risolve le proprietà dell'interfaccia. Vedi il mio esempio qui sotto.
IConcreteClass verrà risolto, ma ISubtype no.
public class SubConcreteClass : ISubtype
{
// properties
}
public class ConcreteClass : IConcreteClass
{
public ISubtype Subtype {get;set;}
}
Una volta che il formattatore mezzi vede che è in grado di risolvere il tipo di IConcreteClass, è quindi legge l'intero flusso. Quindi immagino che non ci sia alcuna possibilità di risolvere i membri dell'interfaccia.
per un'altra alternativa, controllare la mia risposta a una domanda simile [_here_] (http: // stackoverflow.com/questions/14124189/can-i-pass-an-interface-based-object-to-an-mvc-4-webapi-post/22279204#22279204). –