5

Roslyn CTP がオープンになったので、C# スクリプトを書く以外に Roslyn CTP でできるすばらしいことを考えてみることができます。

asp.net mvc ではカスタム コントローラー ファクトリを作成できるため、次のようなファクトリを作成できますか。

  • オンザフライでソース ファイルからコントローラーをコンパイルします。
  • 新しく作成された型をランタイムにロードします (ランタイムはそれを処理できますか?)
  • 同じコントローラに対する以前のリクエストがすでに行われている場合は、以前のタイプを無効にします

これにより、コードを書くだけでコントローラーのプロトタイプを作成したり、コントローラーを変更したりできるようになり、コントローラーファクトリーは再コンパイルする必要なく変更を取得することができます。

4

3 に答える 3

5

数か月前に、monos コンパイラをサービスとして使用してランタイム コントローラを実装しました。

github で情報とコードへのリンクを見つけることができます: http://www.fusonic.net/en/blog/2011/04/01/scripting-asp-net-mvc-controllers-at-runtime/

最初はとても良さそうに見えますが、いくつかの制限があるため、実際にはそれほど便利ではありません。

まず第一に、Visual Studio は、デバッグ中のソース コードの変更を厳密にロックして禁止するため、ユーザーとコードの中間に位置します。したがって、ソース ファイルを編集する唯一の方法は、デバッガを接続せずに実行することです。

2 番目の問題は、(明らかに) コントローラーに限定されていることです。実行時にコントローラーの編集を開始するとすぐに、実際のスクリプト環境が必要になります! たとえば、モデル、サービス、および実行時にプロジェクトにあるコードを変更します。

次に、動的コードをデバッグできないなどの問題があります...

完全な解決策ではないため、数日後に使用を停止しました。コントローラー (実際のスクリプト フレームワークなど) に限定されず、デバッグも含めて、実行時に mvc プロジェクト全体を動的にコンパイルできる .net のソリューションを夢見ています。

Java の世界では、これに対する解決策があります: http://zeroturnaround.com/jrebel/

于 2011-10-24T20:22:01.827 に答える
2

私は MVC コントローラ ファクトリについてはあまり知りませんが、できることはあるように思えます。ステップ 2 は、出力されたコードの標準 Assembly.Load() で実行できます。Roslyn には、可能であれば動的メソッドにコンパイルする機能もあり、これはさらに軽量です。

関連する例として、 David Ebbo がまとめたRazor ビュー エンジンのプロトタイプを見てみましょう。

于 2011-10-21T15:36:40.243 に答える
1

ScriptCsを見てください。そのようなことができるようになるのはもっと早くなると思います。

于 2013-04-04T08:32:04.303 に答える