Ich arbeite an einem ASP.NET-Web-API-Projekt in C# für eine JSON-Schnittstelle zu einer mobilen Anwendung. Meine Idee war, Schnittstellen für alle Anfragen zu erstellen und diese Schnittstellen dann nur im Web-API-Code zu verwenden.Abhängigkeitsinjektion für ASP.NET-Web-API-Aktionsmethodenparameter
endete ich mit so etwas wie dies oben:
public interface IApiObject {}
public interface IApiResponse<T> : IApiObject where T : IApiObject {}
public interface IApiRegistrationRequest : IApiObject {}
Mein Controller sieht wie folgt aus:
public class MyApiController : ApiController
{
public IApiResponse<IApiObject> Register(IApiRegistrationRequest request) {
// do some stuff
}
}
auch My Web API-Projekt enthält Implementierungen dieser Schnittstellen.
Ich nahm an, dass Web-API-Projekte Modellbindung wie MVC-Projekte verwenden, also erstellte ich inheritance aware ModelBinderProvider für die Bereitstellung einer Sammelmappe für alle IApiObjects und einen benutzerdefinierten Modellbinder mit einem Unity-Container zum Auflösen der Schnittstellen zu ihren Implementierungen.
Jedoch, nach einigen weiteren Untersuchungen, stieß ich auf How Web API does parameter binding und fand heraus, dass Web-API Formatierer statt Modellbinder für komplexe Typen verwendet. Der verknüpfte Blogpost empfiehlt die Verwendung eines ModelBinderAttribute für meine Aktionsparameter, aber dieses Attribut akzeptiert nur einen Typ als Parameter. Mein benutzerdefiniertes Modellbinder enthält jedoch keinen leeren Konstruktor (es benötigt einen Einheitscontainer), also müsste ich eine Instanz davon übergeben.
Die andere Möglichkeit, die ich mir vorstellen kann, ist die Verwendung der Abhängigkeitsinjektion für die Formatierer. Leider kenne ich sie nicht, da ich sie vorher noch nie benutzt habe.
Welches ist der richtige Weg? Und wie mache ich das?
Danke, das sieht interessant aus, aber ich kann nicht einfach die Technologie jetzt ändern. – Chris