2011-10-21 12 views
5

Roslyn CTPをオープンにして、C#スクリプトを書く以外にもできることを考えることができます。Roslynを使ってコントローラを動的にコンパイルする

のasp.net MVCを使用して、カスタムコントローラファクトリを書くことができますので、我々は

  • ロード新しく作成されたタイプをオンザフライ

    • は、ソースファイルからコントローラをコンパイル工場を書くことができ
    • (ランタイムがそれを扱うことができますか?)実行時に、同じコントローラの以前の要求が既に

    これをuすることができますでしょう行われている場合は、以前のタイプを覆しますコントローラを素早くプロトタイプ化したり変更したりすることができます。コードを書くだけで、コントローラファクトリは再コンパイルする必要なく変更を受け取ります。

  • +2

    これはRoslynなしで行うことができます。 – Ankur

    +0

    Orchard CMSを見てください:今日、ソースコードからモジュールを動的に読み込みます。 –

    +0

    オーチャードは、アセンブリをロードする前にcsprojをコンパイルすることでそうしたことを行いますが、「幾分実験的」であると記述しています:http://www.orchardproject.net/docs/Orchard-module-loader-and-dynamic-compilationashx – Thomas

    答えて

    5

    私はすでに数ヶ月前にmonosコンパイラをサービスとして使用してランタイムコントローラを実装しています。

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

    それは冒頭で本当に良さそうに見えますが、それはので、いくつかの制限の現実の世界でその超便利ではありません。

    まず最初に、Visual Studioはデバッグ中にソースコードの変更を厳密にロックしたり禁止したりするため、あなたとあなたのコードの真ん中にあります。したがって、ソースファイルを編集する唯一の方法は、デバッガを接続しないで実行することです。

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

    次に、あなたはそれだけで完全なソリューションではありませんので、私はいくつかの日後にそれを使用して停止したあなたの動的なコードをデバッグのように...

    can`t問題を抱えています。 mvc-project全体が実行時にダイナミックにコンパイルできる(実際のスクリプティングフレームワークのような)コントローラに限定されず、デバッグを含む、.netのソリューションを夢見ています。 Javaの世界で

    このためのソリューションがあります:http://zeroturnaround.com/jrebel/

    +0

    それは可能ですが、それだけでは扱いにくいです。 – Thomas

    +0

    私は私のasp mvc 3プロジェクトでこれを行うためにモノを使用しています。プロジェクトが大規模なときは、時間を節約するアプローチです。 – lontivero

    2

    MVCコントローラの工場についてはあまりよく分かりませんが、そうすることができます。手順2は、発行されたコードの標準Assembly.Load()で行うことができます。 Roslynは、できるだけ軽量化された動的メソッドにコンパイルする機能も備えています。

    関連する例については、David EbboがまとめたプロトタイプRazor view engineをご覧ください。

    +0

    スクリプトレットを動的メソッドに変換するにはどうすればよいですか? –

    1

    ScriptCsを見てみましょう。私は早くそれが可能なことを信じます。

    関連する問題