私は以前、asp.net MVC ではなく、純粋な asp.net Web フォームでこれを行いました。私は自家製の MVP (Model-View-Presenter) パターンを使用しました。Presenter (== あなたの場合は Controller) を WinForms アプリで使用できるようにするための最も重要なことは、システムに関係するものを何も参照しないことでした。 。ウェブ
したがって、最初に行う必要があるのは、要求、応答、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");
}
}
私は asp.net MVC の実装を詳しく見ていませんが、これが、あなたが求めているシナリオを有効にするのはおそらく大変な作業になるということを示してくれることを願っています.
代わりに、異なるプラットフォーム用にビューとコントローラーを再コーディングする必要があることを受け入れることを検討し、代わりに、コントローラーを非常に薄く保ち、コードの大部分を共有可能なサービスレイヤーに配置することに集中することをお勧めします.
幸運を!