• asp.net core 自定义中间件和service


    首先新建项目看下main方法:

    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。

    下面生成自定义的Service:

    public interface IMService
    {
        string GetString();
    }
    
    public class MService:IMService
    {
        public string GetString()
        {
            return "这是我的服务";
        }
    }
    View Code

    可以在ConfigureServices中这样使用:

    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();

    下面自定义一个middleware

        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>();

    也可以

    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();
    }





  • 相关阅读:
    打sql server pack4后打开网站报错的解决办法
    北京大学的三角形文章
    一次SQL Server 2000修复实践的说明
    今天重看了几集《将爱情进行到底》
    MakeFile的写法
    [经验杂谈]与大虾对话:领悟设计模式zz
    论函数调用约定(zz)
    用标准模板库STL实现文件比较(zz)
    C++中的虚函数(virtual function)
    为学院科研办做的个小应用管理程序
  • 原文地址:https://www.cnblogs.com/indexlang/p/5730056.html
Copyright © 2020-2023  润新知