BT

ASP.NET vNext: カスタムプロジェクトローダーと言語サポート

| 作者: Roopesh Shenoy フォローする 0 人のフォロワー , 翻訳者 勇 大地 フォローする 1 人のフォロワー 投稿日 2014年10月25日. 推定読書時間: 4 分 |

原文(投稿日:2014/09/01)へのリンク

The ASP.NET vNext は Rosylyn コンパイラを利用し、実行前にC# ソースコードのコンパイルとロードを行う。David Fowler 氏は独自の言語を対応させることが可能な KRuntime における "DI-by-design" アプローチ の活用法を示した。

KRuntime は ASP.NET vNext アプリケーションの構築・実行に必要な全要素を伴っている。慣習にならい、ランタイムは"design-time"を認めていない。コンパイルとロードは同時に行われる。これに関しては、KRuntime は複数のローダを保持している。project.json ファイルから依存関係一覧を検証し、依存関係のあるライブラリ群を利用してソースファイルのビルドを実施する。

同プロジェクトの参照ローダは興味深い。デフォルトではRosylynProjectReferenceProvider を利用しており RosylynProjectReference を戻り値として返す。名前から指し示す通り、同ローダでは C# ソースのコンパイルとアセンブリのロードに Rosylyn C# コンパイラを利用している。

一方で、この動作を上書きできることを David Fowler 氏は示している。

F# の ASP.NET vNext サポート

Refer David 氏の vNextLanguageSupport github project を閲覧しよう。IProjectReferenceProvider の実装として FSharpProjectReferenceProviderを定義している。同クラスではIMetadataProjectReference のカスタム実装である FSharpProjectReference を戻り値として返している。

FSharpProjectReference は多量な役割を果たしている。同 Emit メソッドでは

  • プロジェクト参照を取得
  • 一時パスにそれらをコピー
  • プロジェクト参照とともにソースファイルを fsc compiler を利用してコンパイル
  • 一時領域からファイルを削除

これら両クラスは FSharpSupport プロジェクトに格納されており、コンパイルとアセンブリとしての参照が可能である。これらの実装は F# のサポート用のものであるが、C# で記述されている点が注目だ。

サンプルの F# プロジェクトで利用するため、Refer David 氏はプロジェクトの project.json ファイルにて projectReferenceProviderTypeを定義した。

(スニペット)

    "language": {
        "name": "F#",
        "assembly": "FSharpSupport",
        "projectReferenceProviderType": "FSharpSupport.FSharpProjectReferenceProvider"
    },

この操作だけで自身の ASP.NET vNext アプリケーション内で F# が利用可能になる。startup クラスは C# クラスの代わりに F# を利用している。

本サンプルは F# を利用しているが、同様の方法で CLR がサポートしている任意の言語を利用することができる。すべきことは、IMetadataProjectReference と IProjectReferenceProvider の実装を提供することだ。

Aleksander Heintz 氏は、David氏のサンプルを更に詳細に解説した記事を公開している。

サンプルは単純なものではない。しかし、KRuntime によってもたらされる組み込み DI の効力を示しており、新機能を追加する際に柔軟な対応が可能になる。KRuntime structure による解説では、Native Process, Host, Managed Entry Point, Application Host を含むランタイムの全レイヤーで依存注入ができる(例として、KRuntime はMono を利用した Linux と OSX で動作する)。

ASP.NET vNext では、Microsoft がどの様に Web フレームワークを構築してデプロイするかの変更を示している。

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

あなたの意見をお聞かせください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする
コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

このスレッドのメッセージについてEmailでリプライする

ディスカッション

InfoQにログインし新機能を利用する


パスワードを忘れた方はこちらへ

Follow

お気に入りのトピックや著者をフォローする

業界やサイト内で一番重要な見出しを閲覧する

Like

より多いシグナル、より少ないノイズ

お気に入りのトピックと著者を選択して自分のフィードを作る

Notifications

最新情報をすぐ手に入れるようにしよう

通知設定をして、お気に入りコンテンツを見逃さないようにしよう!

BT