ASP.NET Core利用HostingStartup加强启动操纵要领详解

ASP.NET Core中我们可以利用一种机制来加强启动时的操纵,它就是HostingStartup。如何叫"加强"操纵,相信相识过AOP观念的同学应该都很是的熟悉。我们常说AOP利用了存眷点疏散的方法,加强了对现有逻辑的操纵。而我们本日要说的HostingStartup就是为了"加强"启动操纵,这种"加强"的操纵甚至可以对现有的措施可以做到无窜改的操纵。譬喻,外部措施集可通过HostingStartup实现为应用提供设置处事、注册处事或中间件管道操纵等。

利用方法

HostingStartup属性暗示要在运行时激活的承载启动措施集。大抵分为两种环境,一种是自动扫描当前Web措施会合通过HostingStartup指定的类,另一种是手动添加设置hostingstartupassembles指定外部的措施会合通过HostingStartup指定的类。第一种方法相对简朴,可是对Web措施自己有入侵,第二种方法稍微巨大一点点,可是可以做到对现有代码无入侵操纵,接下来我们别离演示这两种利用方法。

ASP.NET Core中直接界说

首先是在ASP.NET Core措施中直接利用HostingStartup,这种方法较量简朴首先在Web措施中随便界说一个类,然后实现IHostingStartup接口,最后别忘了在措施会合添加HostingStartupAttribute指定要启动的类的范例,详细代码如下所示

using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; //通过HostingStartup指定要启动的范例 [assembly: HostingStartup(typeof(HostStartupWeb.HostingStartupInWeb))] namespace HostStartupWeb { public class HostingStartupInWeb : IHostingStartup { public void Configure(IWebHostBuilder builder) { //措施启动时打印依据话,代表执行到了这里 Debug.WriteLine("Web措施中HostingStartupInWeb类启动"); //可以添加设置 builder.ConfigureAppConfiguration(config => { //模仿添加一个一个内存设置 var datas = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("ServiceName", "HostStartupWeb") }; config.AddInMemoryCollection(datas); }); //可以添加ConfigureServices builder.ConfigureServices(services=> { //模仿注册一个PersonDto services.AddScoped(provider=>new PersonDto { Id = 1, Name = "yi念之间", Age = 18 }); }); //可以添加Configure builder.Configure(app => { //模仿添加一其中间件 app.Use(async (context, next) => { await next(); }); }); } } }

仅仅利用上面所示的这些代码,便可在Web措施启动的时候去自动执行HostingStartupInWeb的Configure要领,在这内里我们险些可以利用所有针对ASP.NET Core措施设置的操纵,并且不需要在Web措施中特别添加此外代码就可以自动挪用HostingStartupInWeb的Configure要领。

外部措施集引入

我们之前也说过,上面的方法固然利用起来相对简朴一点,仅仅是一点,那就是省去了指定启动措施集的逻辑。可是,上面的方法需要在Web措施中添加,这样的话照旧会修改代码。并且,大概更多的时候我们是在外部的措施会合编写HostingStartup逻辑,这时候就需要利用另一种方法在将外部措施会合引入HostingStartup。首先我们要在自界说的措施会合至少引入Microsoft.AspNetCore.Hosting包才气利用HostingStartup

<PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" />

假如你不需要利用注册中间件的逻辑那么仅仅引入Microsoft.AspNetCore.Hosting.Abstractions即可

<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />

假如需要利用其他成果包,可以自行在界说的措施会合引入。好比我们界说了一个名为HostStartupLib的Standard类库,并建设了名为HostStartupLib的类

using System; using System.Collections.Generic; using System.Diagnostics; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; [assembly: HostingStartup(typeof(HostStartupLib.HostingStartupInLib))] namespace HostStartupLib { public class HostingStartupInLib : IHostingStartup { public void Configure(IWebHostBuilder builder) { Debug.WriteLine("Lib措施中HostingStartupInLib类启动"); //添加设置 builder.ConfigureAppConfiguration((context, config) => { var datas = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("ServiceName", "HostStartupLib") }; config.AddInMemoryCollection(datas); }); //添加ConfigureServices builder.ConfigureServices(services=> { services.AddScoped(provider=>new PersonDto { Id = 2, Name = "er念之间", Age = 19 }); }); //添加Configure builder.Configure(app => { app.Use(async (context, next) => { await next(); }); }); } } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdfps.html