如何将执行从clr传递到Startup类(startup.cs)?

时间:2015-06-11 01:13:34

标签: asp.net-core dnx

asp.net 5中的Startup类让我感到奇怪。它不是类Startup:ISomething或Startup:BaseSomething,其中接口或基类是某些Microsoft.AspNet。*程序集的一部分。 No Startup只是一个普通的类,具有按惯例创建的正确的魔法方法签名。

如何从DNX传递到Startup.ConfigureServices?

让我们举个例如:

dnx.exe . web

所以。告诉dnx它可以在当前文件夹中找到project.json。从那里找到与键“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

我还了解了dnx如何使用project.json中的参数收集内存编译中的所有源(包括依赖项),因此我们现在拥有用户的程序集“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类似乎是最后一个“魔术”。之前和之后的执行开始变得非常清楚但我觉得我仍然缺少一些东西。

2 个答案:

答案 0 :(得分:4)

DNX知道如何加载和执行具有名为Program的类的程序集,该程序集具有名为Main的方法。运行Microsoft.AspNet.Hosting命令时,您将web作为启动程序集传递给DNX。

托管有Main method

最终从上面提到的Main方法调用的

This code有" Startup"硬编码。实际的硬编码为here

答案 1 :(得分:1)

我想在Victor的回答中添加一些细节:

我写了一系列帖子,深入研究了从the DNX native hostrequest handling引导ASP.NET 5应用程序的细节。所有这些执行细节都包含在帖子中。