Ich habe dies zuvor getan, nicht mit asp.net MVC, sondern mit reinen asp.net Web Forms. Ich habe ein selbstgewähltes MVP-Modell (Model-View-Presenter) verwendet, und die absolut wichtigste Sache, damit der Presenter (== Controller in Ihrem Fall) in einer WinForms-App verwendet werden konnte, war nicht irgendetwas zu tun mit system.web
Also die erste Sache, die Sie tun müssen, ist einzuführen Schnittstelle (n) zu wickeln jede Anfrage, Antwort, Web etc Sachen, und jeder Presenter akzeptieren diese Schnittstellen über Dependency Injection (oder stellen Sie sie zur Verfügung Moderatoren durch eine andere Technik), dann, wenn der Presenter diese eher als die eigentlichen system.web Zeug verwendet.
Beispiel:
Stellen Sie die Kontrolle übertragen von Seite A auf Seite B wollen (die in Ihrer WinForms-Anwendung Sie schließen möchten vielleicht ein B dann offene Form bilden).
Schnittstelle:
public interface IRuntimeContext
{
void TransferTo(string destination);
}
Web-Implementierung:
public class AspNetRuntimeContext
{
public void TransferTo(string destination)
{
Response.Redirect(destination);
}
}
winforms Umsetzung:
public class WinformsRuntimeContext
{
public void TransferTo(string destination)
{
var r = GetFormByName(destination);
r.Show();
}
}
Jetzt ist der Presenter (Controller in Ihrem Fall):
public class SomePresenter
{
private readonly runtimeContext;
public SomePresenter(IRuntimeContext runtimeContext)
{
this.runtimeContext = runtimeContext;
}
public void SomeAction()
{
// do some work
// then transfer control to another page/form
runtimeContext.TransferTo("somewhereElse");
}
}
Ich habe die asp.net MVC-Implementierung nicht im Detail untersucht, aber ich hoffe, dies gibt Ihnen einige Hinweise, dass es wahrscheinlich eine Menge Arbeit sein wird, um das Szenario, das Sie suchen, zu ermöglichen.
Sie können stattdessen akzeptieren, dass Sie die Ansicht und den Controller für die verschiedenen Plattformen neu codieren müssen und sich stattdessen darauf konzentrieren, Ihre Controller extrem dünn zu halten und den Großteil Ihres Codes in eine Serviceebene zu integrieren Geteilt werden.
Viel Glück!
Ich wünschte, ich könnte Sie zweimal wählen, das ist eine großartige Antwort! –