zoukankan      html  css  js  c++  java
  • AspNetCore基础一

    启动流程

    • 创建主机生成器
    • 配置主机
    • 创建主机
    • 启动主机

    主机:

    主机负责Web应用程序的启动和生存期管理,配置服务器、请求处理管道、日志等
    主机实际上是封装了应用资源的对象

    注册服务

    • 服务通常在StartUp类的ConfigureServices方法中配置

    服务大体分三类

    • 内置服务
    • 第三方服务
    • 自定义服务
    #region 内置服务
    // 添加对控制器和API相关功能的支持 但不支持视图和页面 WEBAPI
    //services.AddControllers();
    
    //添加对控制器、API、视图相关功能的支持
    //ASP.NET CORE 3.X MVC模板默认使用
    //services.AddControllersWithViews();
    //添加对Razor Pages和最小控制器的支持
    //services.AddRazorPages();
    
    //ASP.NET CORE 2.X MVC使用
    //services.AddMvc();
    
    //跨域支持
    //services.AddCors() 
    #endregion
    
    #region 第三方服务
    //例如:EF Core 日志框架 Swagger (需要先引用第三方组件)
    #endregion
    
    #region 自定义服务
    /*  
        服务生存周期:
        - 瞬时    每次从服务容器里进行请求实例时 都会创建一个新的实例
        - 作用域  线程单例 在同一个线程(请求)里 只实例化一次
        - 单例    全局单例 每一次都是使用相同的实例
        services.AddTransient()
        services.AddScoped()
        services.AddSingleton()
     */
    //服务相同注册多个 只有后面的会生效
    //services.AddSingleton<IMessageServices,EmailService>();
    //services.AddSingleton<IMessageServices,SmsService>();
    //services.AddMessage(p => p.UseEmail());
    #endregion
    

    自定义服务

    • AddTransient
    • AddScoped
    • AddSingleton

    简单实现

    //声明一个消息服务接口
    public interface IMessageServices
    {
        public string Send();
    }
    
    //实现接口
    public class EmailService : IMessageServices
    {
        public string Send()
        {
            return "EMail";
        }
    }
    
    public class SmsService : IMessageServices
    {
        public string Send()
        {
            return "Sms";
        }
    }
    //一切就绪我们就可以通过下面的方式注册服务
    //services.AddSingleton<IMessageServices,EmailService>();
    //services.AddSingleton<IMessageServices,SmsService>();
    //相同服务注册多个 只有后面的会生效
    

    封装实现

    public class MessageServiceBuilder
    {
        //服务集合
        public IServiceCollection ServiceCollection { get; set; }
        public MessageServiceBuilder(IServiceCollection services)
        {
            ServiceCollection = services;
        }
        public void UseEmail()
        {
            ServiceCollection.AddSingleton<IMessageServices, EmailService>();
        }
        public void UseSms()
        {
            ServiceCollection.AddSingleton<IMessageServices, SmsService>();
        }
    }
    
    public static class MessageServiceExtension
    {
        public static void AddMessage(this IServiceCollection services,Action<MessageServiceBuilder> configure)
        {
            var builder = new MessageServiceBuilder(services);
            configure(builder);
        }
    }
    
    //接下来我们就可以通过AddXX的方式注册服务
    services.AddMessage(p => p.UseEmail());
    

    配置管道中间件

    • 中间件通常在StartUp类的Configure方法中配置

    配置中间件常见的两种方法

    • Use 有Next 它能指向下一个中间件
    • Run 没有Next 终端中间件 专门用来短路请求管道 是放在最后面的

    自定义中间件

    • UseMiddleware

    简单实现

    /// <summary>
    /// 自定义中间件
    /// </summary>
    public class TestMiddleware
    {
        // 注册中间件时调用
        private readonly RequestDelegate _next;
        public TestMiddleware(RequestDelegate next)
        {
            _next = next;
        }
    
        /// <summary>
        /// 中间件业务代码  
        /// 请求到达时调用
        /// </summary>
        /// <param name="httpContext">http上下文</param>
        /// <returns></returns>
        public async Task InvokeAsync(HttpContext httpContext)
        {
            //Http请求部分处理代码
            await httpContext.Response.WriteAsync("Test Request
    ");
    
            await _next(httpContext);
    
            //Http响应部分处理代码
            await httpContext.Response.WriteAsync("Test Response
    ");
        }
    }
    
    //app.UseMiddleware<TestMiddleware>();
    

    封装实现

    public static class CustomMiddlewareExtensions
    {
        public static IApplicationBuilder UseTest(this IApplicationBuilder app)
        {
            return app.UseMiddleware<TestMiddleware>();
        }
    }
    
    //app.UseTest();
    

  • 相关阅读:
    阿里云系列——3.企业网站备案步骤---2018-1-4
    关于VS2017安装的一点扩充说明(15.5)
    Git环境配置+VSCode中文乱码问题
    抛砖引玉之~sftp
    关于链接文件的探讨
    VSCode插件MSSQL教程(昨天提了一下)
    SQL Server 2017 安装过程中的一点说明(有点意思)
    PS如何批量生成缩略图(方法可以通用其他重复劳动)
    mdb导入SqlServer
    01.码医入门(完篇)
  • 原文地址:https://www.cnblogs.com/hklol/p/12887225.html
Copyright © 2011-2022 走看看