He hecho esto anteriormente, no con asp.net MVC pero con formularios web asp.net puros. Usé un patrón MVP (Model-View-Presenter) de fabricación casera, y lo más importante para permitir que el Presentador (== Controlador en su caso) para ser utilizado en una aplicación WinForms fuera no hacer referencia cualquier cosa para hacer con system.web
Por lo tanto, lo primero que debe hacer es introducir interfaces para envolver cualquier solicitud, respuesta, etc., y que cada Presentador acepte estas interfaces mediante Dependency Injection (o ponerlas a disposición del Presentadores por alguna otra técnica), entonces si el presentador usa esos en lugar de las cosas reales del sistema.
Ejemplo:
Imagine que desea transferir el control de una página A a la página B (que en su aplicación WinForms es posible que desee cerrar formar un formulario y luego abierta B).
Interfaz:
public interface IRuntimeContext
{
void TransferTo(string destination);
}
aplicación web:
public class AspNetRuntimeContext
{
public void TransferTo(string destination)
{
Response.Redirect(destination);
}
}
winforms aplicación:
public class WinformsRuntimeContext
{
public void TransferTo(string destination)
{
var r = GetFormByName(destination);
r.Show();
}
}
Ahora el Presentador (Controlador en su caso):
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");
}
}
No he examinado la implementación de asp.net MVC en detalle, pero espero que esto te dé una indicación de que probablemente sea mucho trabajo para habilitar el escenario que estás buscando.
En su lugar, puede considerar aceptar que tendrá que volver a codificar la Vista y el Controlador para las diferentes plataformas y concentrarse en mantener sus controladores extremadamente delgados y colocar la mayor parte de su código en una capa de servicio que pueda ser compartido.
¡Buena suerte!
¡Desearía poder votar dos veces, esta es una gran respuesta! –