• ASP.NET Core3.x 基础(1)


    ASP.NET Core与2.x相比发生的一些变化:

    • 项目结构
    • Blazor
    • SignalR
    • gRPC

    关于Program类:Main方法,在系统执行时就会找到这个Main方法,实际上是配置了ASP.NET Core这个应用,本质上还是一个控制台应用。而针对整个ASP.NET Core这个应用的配置呢还是通过 CreateHostBuilder 这个方法来进行的。返回类型是IHostBuilder,返回之后呢就执行上面的Bulid()方法,这个方法执行完后整个项目就从控制台应用变成了ASP.NET Core应用。CreateHostBuilder 会调用Host类下面的静态方法CreateDefaultBuilder,然后会对WebHost进行配置配置什么呢?比如说路由的配置、如何处理配置文件,Web应用服务器(Kestrel)。当然我们可以修改这里的配置,也可以自己手动配置。指向Startup类文件

     Startup类文件相比Program类文件来说就比较动态,运行时是通过一种约定来进行调用的

    调用顺序呢是先调用上面这个ConfigureServices这个方法,然后在调用下面的Configure方法。

    ConfigureServices:主要负责依赖注入相关的东西

    DI依赖注入(Dependency Injection):依赖注入机制是依赖于IoC容器(Inversion of Control)。原理是当我们ASP.NET Core项目运行的时候呢,有一些类会在IoC容器里面进行注册。而这些类型呢用典型的IoC术语来说就是服务(service)这些服务注册以后呢,其他的类型包括本身都可以向IoC容器来请求这些注册的实例。在注册的时候,你也可以设置这些注册的服务的生命周期。这些对象服务的生命周期分为三种:

    • Transient:瞬时生命周期,Transient服务在每次被请求时都会被创建一个新的对象。这种生命周期比较适用于轻量级的无状态的服务
    • Scoped:Scoped生命周期的服务是每次Web请求被创建,局部单例对象,在某个局部内饰同一个对象。一次请求内是一个单例对象,多次请求则多个不同的单例对象
    • Singleton:Singleton生命能够周期服务在第一次被请求时创建,在后续的每个请求都会使用同一个实例。如果你的应用需要单例服务,推荐的做法是交给服务容器来负责单例的创建和生命周期管理,而不是自己来走这些事情

    怎么去注册服务呢?

    我们可以通过IServiceCollection接口它的变量service来往IoC中注册服务。

    举个例子:比如我们现在要去注册一个Mvc服务(见代码28行)

    当然这是传统的Mvc(不包括Razor)。

    如果你想要功能更加强大,也可以参考微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.0

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Threading.Tasks;
     5 using Microsoft.AspNetCore.Builder;
     6 using Microsoft.AspNetCore.Hosting;
     7 using Microsoft.AspNetCore.Http;
     8 using Microsoft.Extensions.Configuration;
     9 using Microsoft.Extensions.DependencyInjection;
    10 using Microsoft.Extensions.Hosting;
    11 using WebApplication1.Services;
    12 
    13 namespace WebApplication1
    14 {
    15     public class Startup
    16     {
    17         private readonly IConfiguration _configuration;
    18         //依赖注入
    19         public Startup(IConfiguration configuration)
    20         {
    21             _configuration = configuration;
    22         }
    23         public void ConfigureServices(IServiceCollection services)
    24         {
    25             //负责配置依赖注入
    26             //DI 依赖注入机制依赖于IOC容器(控制反转)
    27             //使用Asp.NET Core MVC,所有需要通道控制器和视图要进行注册一下mvc(通过services服务注册)
    28             services.AddControllersWithViews();
    29 
    30             //注册一个自己写的服务
    31             /*
    32              * AddSingleton 表示我们注册这个服务的生命周期 泛型中写了一个接口和实现接口的类,作用就是每当有其他类型请求IClock时,那IoC容器就返回一个ChinaClock
    33              */
    34             services.AddSingleton<IClock, ChinaClock>();
    35 
    36             //分别注册服务
    37             services.AddSingleton<IDepartmentService, DepartmentService>();
    38             services.AddSingleton<IEmployeeService, EmployeeService>();
    39             //依赖注入映射
    40             services.Configure<ThreeOptions>(_configuration.GetSection("WebApplication1"));
    41         }
    42         /*
    43          * IoC容器
    44          *  -注册
    45          *  -请求实例-实例的生命周期
    46          *      -Transient
    47          *      -Scoped
    48          *      -Singleton
    49          */
    50         public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    51         {
    52             //判断是否是开发模式
    53             if (env.IsDevelopment())
    54             {
    55                 //如果是,这个中间件作用:抛出错误信息到一个页面
    56                 //开发模式下:插入管道的第一个中间件
    57                 app.UseDeveloperExceptionPage();
    58             }
    59             //静态文件中间件(html、css、js)
    60             app.UseStaticFiles();
    61 
    62             //app.UseHttpsRedirection();
    63 
    64             //路由中间件:插入管道的第二个中间件(如果不是开发模式那么就是管道中的第一个中间件)
    65             app.UseRouting();
    66 
    67             /*
    68              * 端点:endpoints 端点就是进来的http请求的url的结尾那部分,这部分会被中间件进行处理
    69              * MVC:/Home/Index
    70              * Razor Pages:/SomePage
    71              * SignalR:/Hub/Chat
    72              */
    73              //通过lambda表达式配置端点中间件
    74             app.UseEndpoints(endpoints =>
    75             {
    76                 //注册一个MVC路由模板(实际上可以注册多个):
    77                 endpoints.MapControllerRoute(
    78                     name: "default",
    79                     pattern: "{controller=Department}/{action=Index}/{id?}");
    80             });
    81         }
    82     }
    83 }

    默认情况下ASP.NET Core项目会加载appsetting.json这个配置文件

    如果你想修改这些配置,就可以手动配置,比如数据库连接字符串什么的

  • 相关阅读:
    C#时间格式转换问题(12小时制和24小时制)
    ajax跨域请求webservice webconfig配置
    C#时间戳转化为DateTime
    C#生成缩略图
    codeforces-1348-C Phoenix and Distribution
    P4314 CPU监控
    YangK's dfs序与树链剖分
    Yangk's 静态主席树
    P2253 好一个一中腰鼓!
    codeforces-1341D-Nastya and Scoreboard 记忆化搜索
  • 原文地址:https://www.cnblogs.com/hcyesdo/p/12834345.html
Copyright © 2020-2023  润新知