ASP.NET Core使用HostingStartup增强启动操作方法详解
副问题[/!--empirenews.page--]
在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(); }); }); } } } 然后我们将自界说的HostStartupLib这个Standard类库引入Web项目中,运行Web措施,发明HostingStartupInLib的Configure要领并不能被挪用。着实我们上面说过了,将HostingStartup从外部措施集引入的话必要手动指定启动措施集的名称。指定启动措施集的方法有两种,一种是指定IWebHostBuilder的扩展UseSetting指定 public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { //通过UseSetting的方法指定措施集的名称 webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "HostStartupLib"); //假如HostingStartup存在多个措施齐集可以行使;脱离,好比HostStartupLib;HostStartupLib2 //webBuilder.UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "HostStartupLib;HostStartupLib2"); webBuilder.UseStartup<Startup>(); }); 另一种通过添加情形变量ASPNETCORE_HOSTINGSTARTUPASSEMBLIES的方法,可以通过配置launchSettings.json中 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |