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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using WebApplication1.Services; namespace WebApplication1
{
public class Startup
{
private readonly IConfiguration _configuration;
//依赖注入
public Startup(IConfiguration configuration)
{
_configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
//负责配置依赖注入
//DI 依赖注入机制依赖于IOC容器(控制反转)
//使用Asp.NET Core MVC,所有需要通道控制器和视图要进行注册一下m\v\c(通过services服务注册)
services.AddControllersWithViews(); //注册一个自己写的服务
/*
* AddSingleton 表示我们注册这个服务的生命周期 泛型中写了一个接口和实现接口的类,作用就是每当有其他类型请求IClock时,那IoC容器就返回一个ChinaClock
*/
services.AddSingleton<IClock, ChinaClock>(); //分别注册服务
services.AddSingleton<IDepartmentService, DepartmentService>();
services.AddSingleton<IEmployeeService, EmployeeService>();
//依赖注入映射
services.Configure<ThreeOptions>(_configuration.GetSection("WebApplication1"));
}
/*
* IoC容器
* -注册
* -请求实例-实例的生命周期
* -Transient
* -Scoped
* -Singleton
*/
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//判断是否是开发模式
if (env.IsDevelopment())
{
//如果是,这个中间件作用:抛出错误信息到一个页面
//开发模式下:插入管道的第一个中间件
app.UseDeveloperExceptionPage();
}
//静态文件中间件(html、css、js)
app.UseStaticFiles(); //app.UseHttpsRedirection(); //路由中间件:插入管道的第二个中间件(如果不是开发模式那么就是管道中的第一个中间件)
app.UseRouting(); /*
* 端点:endpoints 端点就是进来的http请求的url的结尾那部分,这部分会被中间件进行处理
* MVC:/Home/Index
* Razor Pages:/SomePage
* SignalR:/Hub/Chat
*/
//通过lambda表达式配置端点中间件
app.UseEndpoints(endpoints =>
{
//注册一个MVC路由模板(实际上可以注册多个):
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Department}/{action=Index}/{id?}");
});
}
}
}

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

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

ASP.NET Core3.x 基础(1)的更多相关文章

  1. ASP.NET Core3.x 基础—注册服务(2)

    这篇文章介绍在ASP.NET Core中注册一下自己的服务. 首先创建一个Services文件夹.在文件夹里面创建一个接口 IClock,以及两个类ChinaClock.UtcClock.这两个类分别 ...

  2. 探索Asp net core3中的 项目文件、Program.cs和通用host(译)

    引言 原文地址 在这篇博客中我将探索一些关于Asp.net core 3.0应用的基础功能--.csproj 项目文件和Program源文件.我将会描述他们从asp.net core 2.X在默认模版 ...

  3. Asp.Net Core3.x中使用Cookie

    在Asp.Net中使用Cookie相对容易使用,Request和Response对象都提供了Cookies集合,要记住是从Response中存储,从Request中读取相应的cookie.Asp.Ne ...

  4. 第二节:Web前端-ASP.NET之C#基础

    第二节:Web前端-ASP.NET之C#基础 学习ASP.NET,要掌握学习语言,控件等技能, <div style="text-align: center; line-height: ...

  5. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(三):创建使用[ClientCredentials客户端凭证]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建 ...

  6. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建API项目,配置IdentityServer保护API资源

    配套源码:https://gitee.com/jardeng/IdentitySolution 接上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(一):搭 ...

  7. ASP.Net Core3.1 生成二维码填坑

    ASP.Net Core3.1 使用QrCode生成二维码 部署到Linux报错 The type initializer for 'System.DrawingCore.GDIPlus' threw ...

  8. 《Asp.Net Core3 + Vue3入坑教程》-Net Core项目搭建与Swagger配置步骤

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程仅适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 教程后 ...

  9. 《Asp.Net Core3 + Vue3入坑教程》 - 6.异常处理与UserFriendlyException

    简介 <Asp.Net Core3 + Vue3入坑教程> 此教程适合新手入门或者前后端分离尝试者.可以根据图文一步一步进操作编码也可以选择直接查看源码.每一篇文章都有对应的源码 目录 & ...

随机推荐

  1. Windows故障转移群集(WSFC)的备份和恢复

    使用wbadmin进行备份和恢复将C盘数据备份到E盘查看备份的版本以及包含的items模拟群集角色被误删除进行恢复操作检查恢复的效果 WSFC群集的备份和恢复功能是使用Windows Server B ...

  2. 公众号迁移 原有数据库openid 更新主体openid

    今天一个两年前做的公众号项目 要更改主体,随之而来的是公众号的迁移. 公众号迁移后关注的粉丝也会对应的进行迁移,还会给粉丝发送相关通知. 大体流程如下图 迁移的具体步骤我就不细说了.今天主要说的是 迁 ...

  3. linux目录结构 主流Linux发行版的目录结构

    目录 目录结构 一般教学的目录 CentOS7 openSUSE15.1 Ubuntu18.04 详细说明: /dev目录 /etc目录 /proc目录 /usr目录 /var目录 比较重要的目录 文 ...

  4. 2019CSP-J T4 加工零件

    题目描述 凯凯的工厂正在有条不紊地生产一种神奇的零件,神奇的零件的生产过程自然也很神奇.工厂里有 n 位工人,工人们从 1 ∼n 编号.某些工人之间存在双向的零件传送带.保证每两名工人之间最多只存在一 ...

  5. 利用宝塔和rainloop搭建咱的邮箱

    需要咱准备的东东:一枚域名.服务器需根据情况开放25.110.143.465.993端口.宝塔邮局管理器.rainloop.LNMP或者LAMP. 搭建步骤: 1.安装宝塔邮局管理器: 2.设置宝塔邮 ...

  6. C++语法小记---智能指针

    智能指针 用于缓解内存泄露的问题 用于替代原生指针 军规:只能指向堆空间中的对象或变量 方法 在智能指针的析构函数中调用delete 重载"->"操作符,只能重载成成员函数, ...

  7. 想进大厂?字节跳动等独角兽公司都在招募Python工程师!(Python就是第一语言)

    在本文章中,作者通过自身经历,力求客观的谈谈个人选择学习Python的动机,以及独角兽公司对Python工程师的要求及薪资. 从目前各种迹象(企业招聘,语言排名等)看来Python相对Java应该是暂 ...

  8. SmartMS如何使用二次验证码/虚拟MFA/两步验证/谷歌身份验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 SmartMS如何使用二次验证码/虚拟MFA/两步验证/谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无 ...

  9. nodejs--抓取页面的数据--图

    感觉挺有意思,比php好玩 ----做个图留个 纪念

  10. 搞事情?Spring Boot今天一口气发布三个版本

    学无止境?本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BAT的乌托邦]逐个击 ...