asp.net core 自定義中間件和service

首先新建項目看下main方法:app

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseKestrel()
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}
main方法

其中,UseStartup<Startup>()方法使用了Startup類,在Startup類,有ConfigureServices和Configure方法,調用順序是先ConfigureServices後Configure。async

 

下面生成自定義的Service:ide

public interface IMService
{
    string GetString();
}

public class MService:IMService
{
    public string GetString()
    {
        return "這是個人服務";
    }
}
View Code

能夠在ConfigureServices中這樣使用:ui

services.AddSingleton<IMService, MService>();
或者
s
ervices.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>();
    }
}
View Code

這樣就能夠在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);
        }
    }
View Code

一樣的,能夠在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();
}
相關文章
相關標籤/搜索