Sto lavorando a un progetto API Web ASP.NET in C# per un'interfaccia JSON a un'applicazione mobile. La mia idea era di creare interfacce per tutte le richieste e quindi utilizzare solo queste interfacce nel codice API Web.Iniezione di dipendenza per parametri del metodo di azione dell'API Web ASP.NET
ho finito con qualcosa di simile:
public interface IApiObject {}
public interface IApiResponse<T> : IApiObject where T : IApiObject {}
public interface IApiRegistrationRequest : IApiObject {}
mio regolatore di simile a questa:
public class MyApiController : ApiController
{
public IApiResponse<IApiObject> Register(IApiRegistrationRequest request) {
// do some stuff
}
}
Il mio progetto API Web contiene anche implementazioni di queste interfacce.
Supponevo che i progetti API Web utilizzassero l'associazione modello come fanno i progetti MVC, quindi ho creato un inheritance aware ModelBinderProvider per fornire un raccoglitore per tutti gli IApiObjects e un raccoglitore modello personalizzato utilizzando un contenitore Unity per risolvere le interfacce con le loro implementazioni.
Tuttavia, dopo ulteriori indagini, ho trovato How Web API does parameter binding e ho scoperto che l'API Web utilizza i formattori anziché i raccoglitori di modelli per tipi complessi. Il post del blog collegato consiglia di utilizzare ModelBinderAttribute sui miei parametri di azione, ma tale attributo accetta solo un tipo come parametro. Tuttavia, il mio modello personalizzato non contiene un costruttore vuoto (ha bisogno di un contenitore di unità), quindi dovrei passare un'istanza di esso.
L'altro modo in cui riesco a pensare è utilizzare l'iniezione di dipendenza per i formattatori. Sfortunatamente, non li conosco come non li ho mai usati prima.
Qual è la giusta direzione? E come lo faccio?
Grazie, sembra interessante, ma non posso cambiare facilmente la tecnologia in questo momento. – Chris