asp.net 5 の Startup クラスは、奇妙なアヒルのように思えます。クラス Startup : ISomething または Startup : BaseSomething ではありません。インターフェイスまたは基本クラスは、Microsoft.AspNet.* アセンブリの一部です。No Startup は、規則によって作成された正しい魔法のメソッド シグネチャを持つ単純なクラスです。
実行は DNX から Startup.ConfigureServices にどのように渡されますか?
たとえば、次のように呼び出します。
dnx.exe . web
だから。現在のフォルダーで project.json を見つけることができることを dnx に伝えます。そこから、キー「web」に関連付けられたコマンドが見つかります。したがって、ローカルの project.json にこれがある場合:
"commands": {
"web" : Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
}
dnx.exe と同等になるように組み合わせたスタブを実行します。Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000 "
また、メモリ内コンパイルのために project.json のパラメーターを使用して、dnx がすべてのソース (依存関係を含む) を収集する方法も取得するため、ユーザーのアセンブリ "MyAssembly" とすべての依存アセンブリを dnx で使用できるようになりました。dnx は Microsoft.AspNet.Hosting をマネージ エントリ ポイントとしてロードしました。したがって、実行はアンマネージ "スタブ" から Microsoft.AspNet.Hosting マネージ アセンブリに渡されます。ここまで正解?
次のパラメーターは、Microsoft.AspNet.Hosting に、Microsoft.AspNet.Server.WebListener のインスタンスをホストすることを指示します (具体的には、localhost のポート 500 で)。では、Microsoft.AspNet.Server.WebListener は、「MyAssembly」で具体的に「Startup」という名前のクラスを探すことをどのように「認識」しますか。Microsoft.AspNet.Server.WebListener にハード コードされているだけですか? Microsoft.AspNet.Hosting に?
Startup クラスへのジャンプは、最後の「魔法」のようです。その前後の実行はかなり明確になり始めていますが、まだ何かが足りないと感じています。