Die Beziehung von HttpPostedFileBase zu HttpPostedFileWrapper

Ich verstehe die Beziehung zwischenHttpPostedFileBase undHttpPostedFileWrapperin Bezug auf die Notwendigkeit für beide (d. h. beim Testen / Verspotten von Einheiten). Aber warum, wenn ich einen Haltepunkt auf die Rückkehr für setzenHttpPostedFileBase, zeigt es es alsHttpPostedFileWrapper?

Außerdem,HttpPostedFileBase implementiert die ContentType-Eigenschaft nicht. Also, warum gibt es einen Wert zurück, wenn mein Codenur VerweiseHttpPostedFileBase, und nichtHttpPostedFileWrapper? Was für ein Trick ist das?

Bearbeiten Sie # 1:

Danke für die tolle Antwort @ lawliet29. Ich habe die Struktur wie vorgeschlagen ausgeschrieben.

public sealed class MyHttpPostedFile
{
    public string ContentType { get { return "123"; } }
}

public abstract class MyHttpPostedFileBase
{
}

public class MyHttpPostedFileWrapper : MyHttpPostedFileBase
{
    private MyHttpPostedFile _myHttpPostedFile;    

    public MyHttpPostedFileWrapper(MyHttpPostedFile myHttpPostedFile) { 
        _myHttpPostedFile = myHttpPostedFile;
    }

    public string ContentType { get { return _myHttpPostedFile.ContentType; } }
}

Damit dies funktioniert, müsste ich den Parameter wie folgt übergeben:

GetFiles(new MyHttpPostedFileWrapper(new MyHttpPostedFile());

Hier scheint der Trick zu liegen, den ich in Frage stelle. Woher weiß .NET, dass es sich bei den übergebenen Bytes um eine Typklasse handeltMyHttpPostedFile und dass es dieses Objekt nehmen und es als Parameter an meinen Konstruktor übergeben soll?

Bearbeiten Sie # 2:

Ich wusste nicht, dass der ASP.NET MVC-Binder mehr kann als nur Bytes zu übergeben, indem er diese übergeordneten Objekte übergibt. Dies ist der Trick, über den ich mich gewundert habe! Danke für die tollen Antworten.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage