Я делал это ранее, не с asp.net MVC, а с чистыми веб-формами asp.net. Я использовал самодельный шаблон MVP (Model-View-Presenter), и самое важное, что позволило использовать Presenter (== Controller в вашем случае) в приложении WinForms, было не ссылаться на что-либо делать с system.web
Итак, первое, что вам нужно сделать, это ввести интерфейс (ы) для переноса любого запроса, ответа, веб-содержимого и т. Д., И чтобы каждый докладчик принимал эти интерфейсы с помощью внедрения зависимостей (или делал их доступными для докладчиков каким-либо другим способом). ), то если докладчик использует их, а не фактический материал system.web.
Пример:
Представьте, что вы хотите передать управление со страницы A на страницу B (на которой в вашем приложении winforms вы можете закрыть форму A, а затем открыть форму B).
Интерфейс:
public interface IRuntimeContext
{
void TransferTo(string destination);
}
веб-реализация:
public class AspNetRuntimeContext
{
public void TransferTo(string destination)
{
Response.Redirect(destination);
}
}
Реализация winforms:
public class WinformsRuntimeContext
{
public void TransferTo(string destination)
{
var r = GetFormByName(destination);
r.Show();
}
}
Теперь ведущий (контроллер в вашем случае):
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");
}
}
Я не рассматривал реализацию MVC asp.net подробно, но я надеюсь, что это даст вам некоторое представление о том, что, вероятно, потребуется много работы для включения сценария, который вам нужен.
Вместо этого вы можете подумать о том, чтобы согласиться с тем, что вам придется перекодировать View и Controller для разных платформ, и вместо этого сконцентрироваться на том, чтобы ваши контроллеры были чрезвычайно тонкими и поместили большую часть кода на уровень обслуживания, общий.
Удачи!