有没有专门做航拍婚礼网站,wordpress后台经常504,网站建设外包费用,wordpress打开速度很慢开发.NET Core应用#xff0c;直接映入眼帘的就是Startup类和Program类#xff0c;它们是.NET Core应用程序的起点。通过使用Startup#xff0c;可以配置化处理所有向应用程序所做的请求的管道#xff0c;同时也可以减少.NET应用程序对单一服务器的依赖性#xff0c;使我们… 开发.NET Core应用直接映入眼帘的就是Startup类和Program类它们是.NET Core应用程序的起点。通过使用Startup可以配置化处理所有向应用程序所做的请求的管道同时也可以减少.NET应用程序对单一服务器的依赖性使我们在更大程度上专注于面向多服务器为中心的开发模式。目录Startup讨论Starup所承担的角色Startup编写规范ConfigureServicesConfigure扩展Startup方法深入源码查看Startup是如何注册和执行的UseStartup源码创建Startup实例ConfigureServices和ConfigureStarup所承担的角色Startup作为一个概念是ASP.NET Core程序中所必须的Startup类本身可以使用多种修饰符(public、protectprivate、internal)作为ASP.NET Core应用程序的入口它包含与应用程序相关配置的功能或者说是接口。虽然在程序里我们使用的类名就是Startup但是需要注意的是Startup是一个抽象概念你完全可以名称成其他的比如MyAppStartup或者其他的什么名称只要你在Program类中启动你所定义的启动类即可。当然如果不想写Startup可以在Program类中配置服务和请求处理管道请参见评论区5楼非常感谢Emrys耐心而又全面的指正。以下是基于ASP.NET Core Preview 3模板中提供的写法不管你命名成什么只要将webBuilder.UseStartup()中的泛型类配置成你定义的入口类即可;Startup编写规范下面是ASP.NET Core 3.0 Preview 3模板中Startup的写法 通过以上代码可以知道Startup类中一般包括构造函数通过我们以前的开发经验我们可以知道该构造方法可以包括多个对象IConfiguration表示一组键/值应用程序配置属性。IApplicationBuilder是一个包含与当前环境相关的属性和方法的接口。它用于获取应用程序中的环境变量。IHostingEnvironment是一个包含与运行应用程序的Web宿主环境相关信息的接口。使用这个接口方法我们可以改变应用程序的行为。ILoggerFactory是为ASP.NET Core中的日志记录系统提供配置的接口。它还创建日志系统的实例。ConfigureServicesConfigureStartup在创建服务时会执行依赖项注册服务以便在应用程序的其它地方使用这些依赖项。ConfigureServices 用于注册服务Configure 方法允许我们向HTTP管道添加中间件和服务。这就是ConfigureServices先于Configure 之前调用的原因。ConfigureServices该方法时可选的非强制约束它主要用于对依赖注入或ApplicationServices在整个应用中的支持该方法必须是public的其典型模式是调用所有 Add{Service} 方法主要场景包括实体框架、认证和 MVC 注册服务Configure该方法主要用于定义应用程序对每个HTTP请求的响应方式即我们可以控制ASP.NET管道还可用于在HTTP管道中配置中间件。请求管道中的每个中间件组件负责调用管道中的下一个组件或在适当情况下使链发生短路。 如果中间件链中未发生短路则每个中间件都有第二次机会在将请求发送到客户端前处理该请求。该方法接受IApplicationBuilder作为参数同时还可以接收其他一些可选参数如IHostingEnvironment和ILoggerFactory。一般而言只要将服务注册到configureServices方法中时都可以在该方法中使用。 扩展Startup方法使用IStartupFilter来对Startup功能进行扩展在应用的Configure中间件管道的开头或末尾使用IStartupFilter来配置中间件。IStartupFilter有助于确保当库在应用请求处理管道的开端或末尾添加中间件的前后运行中间件。以下是IStartupFilter的源代码通过源代码我们可以知道该接口有一个ActionIApplicationBuilder类型并命名为Configure的方法。由于传入参数类型和返回类型一样这就保证了扩展的传递性及顺序性具体的演示代码可以参数MSDN 此段文字只是我想深入了解其内部机制而写的如果本身也不了解其实是不影响我们正常编写.NET Core应用的。UseStartup源码ASP.NET Core通过调用IWebHostBuilder.UseStartup方法传入Startup类型注意开篇就已经说过Startup是一个抽象概念我们看下源代码 创建Startup实例 关于ConfigureServices的定义及注册方式是在IWebHostBuilder.ConfigureServices实现的同时可以注意一下25行代码向大家说明了多次注册Startup的ConfigureServices方法时会合并起来的根源。此处抽象委托用的也非常多。该类里面还有Build方法我就不贴出代码了只需要知道主进程在此处开始了。接下来一个比较重要的方法是BuildCommonServices它向当前ServiceCollection中添加一些公共框架级服务以下是部分代码具体代码请查看WebHostBuilder。 由此可见如果我们的Startup类直接实现IStartup它可以并且将直接注册为IStartup的实现类型。只不过ASP.NET Core模板代码并没有实现IStartup它更多的是一种约定并通过DI调用委托依此调用Startup内的构造函数还有另外两个方法。同时上述代码还展示了如何创建Startup类型就是用到了静态方法StartupLoader.LoadMethods类生成StartupMethods实例。ConfigureServices和Configure当WebHost初始化时框架会去查找相应的方法这里我们主要查看源代码其中的核心方法是StartupLoader.FindMethods 它查找的第一个委托是ConfigureDelegate该委托将用于构建应用程序的中间件管道。FindMethod完成了大部分工作具体的代码请查看StartupLoader。此方法根据传递给它的methodName参数在Startup类中查找响应的方法。我们知道Startup的定义更多的是约定所以会去查找Configure和ConfigureServices。当然通过源代码我还知道除了提供标准的“Configure”方法之外我们还可以通过环境配置找到响应的Configure和ConfigureServices。根本来说我们最终查找到的是ConfigureContainerDelegate。接下来一个比较重要的方法是LoadMethods 该方法通过查找对应的方法由于Startup并未在DI中注册所以会调用GetServiceOrCreateInstance创建一个Startup实例此时构造函数也在此得到解析。通过一系列的调用最终到达了ConfigureServicesBuilder.Invoke里面。Invoke方法使用反射来获取和检查在Startup类上定义的ConfigureServices方法所需的参数。 最后我们来看一下ConfigureBuilder类它需要一个ActionIApplicationBuilder委托变量其中包含每个IStartupFilter的一组包装的Configure方法最后一个是Startup.Configure方法的委托。此时所调用的配置链首先命中的是AutoRequestServicesStartupFilter.Configure方法。并将该委托链作为下一个操作之后会调用ConventionBasedStartup.Configure方法。这将在其本地StartupMethods对象上调用ConfigureDelegate。 Startup.Configure方法会调用ServiceProvider所解析的相应的参数该方法还可以使用IApplicationBuilder将中间件添加到应用程序管道中。最终的RequestDelegate是从IApplicationBuilder构建并返回的至此WebHost初始化完成。原文地址https://www.cnblogs.com/edison0621/p/10743228.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com