首先新建項目看下main方法:app
public static void Main(string[] args) { var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); }
其中,UseStartup<Startup>()方法使用了Startup類,在Startup類,有ConfigureServices和Configure方法,調用順序是先ConfigureServices後Configure。async
下面生成自定義的Service:ide
public interface IMService { string GetString(); } public class MService:IMService { public string GetString() { return "這是個人服務"; } }
能夠在ConfigureServices中這樣使用:ui
services.AddSingleton<IMService, MService>();
或者
services.AddScoped<IMService, MService>();
或者
services.AddTransient<IMService, MService>();
這三個方法的做用都同樣,只是生成實例的方式不同,Singleton是全部的service都用單一的實例,Scoped 是一個請求一個實例,Transient 每次使用都是新實例。
也可使用依賴注入的方式添加服務
public static class MServiceExtensions { public static void AddMService( this IServiceCollection services) { services.AddScoped<IMService,MService>(); } }
這樣就能夠在ConfigureServices中這樣用:services.AddMService();this
下面自定義一個middlewarespa
public class MMiddleware { private RequestDelegate nextMiddleware; public MMiddleware(RequestDelegate next) { this.nextMiddleware = next; } public async Task Invoke(HttpContext context) { context.Items.Add("middlewareID", "ID of your middleware"); await this.nextMiddleware.Invoke(context); } }
一樣的,能夠在Configure方法中這樣使用:app.UseMiddleware<MMiddleware>();code
也能夠blog
public static class MyMiddlewareExtensions { public static IApplicationBuilder UseMMiddleware (this IApplicationBuilder app) { return app.UseMiddleware<MMiddleware>(); } }
就能夠app.UseMMiddleware();
在controller中能夠
public IActionResult Index() { ViewBag.str= service.Getstring(); ViewBag.MiddlewareID = HttpContext.Items["middlewareID"]; return View(); }