书接上文:上一节中,我们已经实现Services 层。(https://www.cnblogs.com/xuzhencheng/p/11424751.html

但是具体要如何将服务依赖注入进来呢?继续来续写我学习笔记!这节中更多的是关于NetCore 的一些基础知识。如果基础不错的小伙伴,可以略过!

正文:

看过之前博客的同学们应该对下面这张图不陌生:

图中,红色标记的,基本上都是NetCore 自带的。包括Nlog,算是net Core涉及到的语法糖。

这一节中,我将从下面几个方面对NetCore 的技术点进行说明。园子里对netCore 的讲解其实很多,我的侧重点在于结合我们现在要搭建的开发框架。进行相应的说明:

0.WebAPI 项目的建立

1..NetCore 项目执行(加载)过程

2.中间件的执行过程

3.WebAPI 的路由

4.依赖注入

5.异步编程

---------------------------------------------------------假装的分割线------------------------------------------------------------------------------

0. web API项目的建立

这部分内容,其实没什么太多可说的,最最基础的了。我就默认大家都会了。

不过还说有要说明的一点,随着Core3.0 的发布,可能有部分同学,想新建自己基于NetCore3.0 的项目。在大家去下载skd 的时候,可以看到微软的提示,要求VS更新到V16.3 以上。

然后,打开自己的VS,检查更新,执行更新操作就行了。

更新好VS2019 之后,就是下载下载,并安装netCore skd 了,大家都是成年人了,这个地方我就不占用篇幅进行介绍了。

需要说明的是,我现在的示例项目还是基于netcore 2.2 进行构建的。后期的时候,会单独出一片2.2 升级 3.0 的文章(其实网上已经很多了。。)

接下来就是新建项目的流程,这个部分我就不一一截图展示了。

1..NetCore 项目执行(加载)过程

 接下来我们把精力集中在这一节,我个人认为这部分算得上是NetCore 的核心,也是对比.netFreamwork 来说,改变比较大的。

下面这张图,是我在园子里找的,FlyLolo 的博客里。https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_5.html (也是一个介绍NetCore 的系列,有兴趣同学可以看一下。讲的很好。)

.

首先是程序起点,拿我们所建的Web API 工程来说,程序起点已经不再是Global.asax文件也没有了Application_Start() 方法,而是统一了Program.cs文件中的 Main() 函数作为程序入口。

在CreateWebHostBuilder方法中,创建并配置WebHostBuilder: 首先调用Create­DefaultBuilder( 它是一系列配置的大综合), 进行一系列配置之后, 调用 UseStartup<T>()

在Create­DefaultBuilder这里,我的理解是这样的,NetCore 项目的运行,我们可以在这个地方引用一些它内置的一些东西。比如像UseKestrel、UseIISIntegration、UseConfiguration等下。像下图这样:

但是除了NetCore 框架里面自带的这些东西以外 呢,我们可能还需要引入一些比如像Mvc、EF、Swagger等其他的一些第三方的库也好,框架也好。

那这部分内容我们怎么办呢?就是在UseStartup<T>()这里来做配置和引用了。也就是Startup.cs 。

在这里,除了构造函数以外,还有两个方法,一个是ConfigureServices、一个是Configure。看英文注释已经说的很明白了。都是在runtime 到时候会被调用。

区别是,ConfigureServices是用来做依赖注入的,在这里我们可以通过依赖注入的方式,add sercices

Configure呢,是用来配置HTTP request 管道的。

以上这些,就是我对NetCore 的加载过程的一些理解,可能有所偏差。但能力有限。希望大家可以发表自己的看法,对我所说的做一些修正。

2.中间件的执行过程

这一张图,我觉得对中间件,基本上对中间件的执行过程做了一个很好的说明。但是提到中间件,就不得不提一下过滤器(Filter)

同作为两个AOP利器,过滤器更贴合业务,它关注于应用程序本身,比如你看ActionFilter 和 ResultFilter,它都直接和你的Action,ActionResult交互了,是不是离你很近的感觉,那我有一些比如对我的输出结果进行格式化啦,对我的请求的ViewModel进行数据验证啦,肯定就是用Filter无疑了。它是MVC的一部分,它可以拦截到你Action上下文的一些信息,而中间件是没有这个能力的。

那么,何时使用中间件呢?我的理解是在我们的应用程序当中和业务关系不大的一些需要在管道中做的事情可以使用,比如身份验证,Session存储,日志记录等。其实我们的 asp.net core项目中本身已经包含了很多个中间件。

整个中间件的创建和使用,我找了一个别人的例子:(https://www.cnblogs.com/haosit/p/7754257.html

1.1 必须有一个RequestDelegate 委托用了进入一个中间件

1.2 通过构造函数设置这个RequestDelegate委托

1.3 必须有一个方法Task Invoke,在这个方法里编写中间件内容最后执行RequestDelegate委托

 using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest
{
public class TestMiddleware
{
protected RequestDelegate Next; /// <summary>
/// 参数
/// </summary>
public string Str { get; set; } public TestMiddleware(RequestDelegate next,string s)
{
Next = next;
Str = s;
} public virtual Task Invoke(HttpContext context)
{
context.Response.WriteAsync("this is test string");
return Next(context);
}
}
}

2.编写一个扩展方法用来添加到程序中

 using Haos.Develop.CoreTest.Service;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest
{
public static class Extension
{
public static IApplicationBuilder UserTestMiddleWare(this IApplicationBuilder app, string str)
{
return app.UseMiddleware<TestMiddleware>(str);
}
}
}

3.在Startup添加中间件

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//扩展方式添加
app.UserTestMiddleWare("this is test param");
//直接添加中间件方式
app.Use((context, next) =>
{
context.Response.WriteAsync("this is test");
return next();
});
}

后期我们的框架逐渐的增加日志,身份验证,异常处理的时候,都会用到中间件。所以说,对于NetCore 项目来说,这还是很重要的一环。

这一节本来想简单说一下理论性的东西的,但是不知不觉写了这么多。所以把这部分内容分为两节来写吧。

3.WebAPI 的路由、4.依赖注入、5.异步编程 还说留给下一节吧。

最后:老张发布了Blog.Core 开发社之招募计划书 (https://www.cnblogs.com/laozhang-is-phi/p/11603456.html) 有实力的小伙伴抓紧报名啊!

.netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础的更多相关文章

  1. .netCore+Vue 搭建的简捷开发框架 (3)-- Services层实现

    继续交作业: 上一篇作业中我们实现了 Repository仓储层的应用.并为我们的框架引入了EFCore 详见: .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使 ...

  2. .netCore+Vue 搭建的简捷开发框架 (5)

    文章目录:.netCore+Vue 搭建的简捷开发框架--目录 上两节的内容介绍了一些关于.netCore 相关的一些基础知识.介绍这些的目的,最主要的还是为了我们的架构搭建服务. 上一节中,我们介绍 ...

  3. .netCore+Vue 搭建的简捷开发框架--目录

    .netCore+Vue 搭建的简捷开发框架 .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用 .netCore+Vue 搭建的简捷开发框架 (3)-- Ser ...

  4. .netCore+Vue 搭建的简捷开发框架

    话不多说,上图: 整体项目结构如图所示,我的设计初衷是基于.netCore + DI + Vue 打造一个适合初学者的简捷开发框架. 架构模型采用基于RESTful API风格的前后台分离框架,总体分 ...

  5. .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用

    书接上文,继续搭建我们基于.netCore 的开发框架.首先是我们的项目分层结构. 这个分层结构,是参考张老师的分层结构,但是实际项目中,我没有去实现仓储模型.因为我使用的是EFCore ,最近也一直 ...

  6. .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2

    上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...

  7. .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架

    框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...

  8. Linux+.NetCore+Nginx搭建集群

    本篇和大家分享的是Linux+NetCore+Nginx搭建负载集群,对于netcore2.0发布后,我一直在看官网的文档并学习,关注有哪些新增的东西,我,一个从1.0到2.0的跟随者这里只总结一句话 ...

  9. .NetCore快速搭建ELK分布式日志中心

    懒人必备:.NetCore快速搭建ELK分布式日志中心   该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaics ...

随机推荐

  1. explain详解 和 show profiles

    explain出的有下列几项: 1.select_type 2.type 1.all 全表扫描,从表头扫描到表尾: 2.index 根据索引来读取数据,如果索引已包含了查询数据,只需扫描索引树,否则执 ...

  2. SPOJ - Find The Determinant III 计算矩阵的行列式答案 + 辗转相除法思想

    SPOJ -Find The Determinant III 参考:https://blog.csdn.net/zhoufenqin/article/details/7779707 参考中还有几个关于 ...

  3. HDU4289Control 无向图拆点最大流

    /* ** 无向图拆点,求最大流,最大流即为割点个数. */ #include <iostream> #include <cstdio> #include <cstrin ...

  4. Features Track 2018徐州icpc网络赛 思维

    Morgana is learning computer vision, and he likes cats, too. One day he wants to find the cat moveme ...

  5. 通过对微信pc hook实现微信助手

    本软件主要通过对pc端微信hook来实现的,微信版本2.6.8.52. 软件下载地址: http://blog.yshizi.cn/104.html 软件实现功能: 支持爆粉 支持文本消息群发 支持自 ...

  6. 程序员过关斩将--更加优雅的Token认证方式JWT

    菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了 结果怎么样? 结果面试官问我还有没有更好的方式? 看来你又挂了 别说了,伤心呀.到底还有没有更好的方式呢? 你猜? 基于To ...

  7. Kafka入门宝典(详细截图版)

    1.了解 Apache Kafka 1.1.简介 官网:http://kafka.apache.org/ Apache Kafka 是一个开源消息系统,由Scala 写成.是由Apache 软件基金会 ...

  8. 最小生成树问题---Prim算法学习

    一个具有n个节点的连通图的生成树是原图的最小连通子集,它包含了n个节点和n-1条边.若砍去任一条边,则生成树变为非连通图:若增加一条边,则在图中形成一条回路.本文所写的是一个带权的无向连通图中寻求各边 ...

  9. 使用FreePBX和第三方线路对接

    首先搭建好相关环境 在FreePBX的web-gui控制界面进行操作. 通信接口连接--->中继  先创建一条中继线路: 创建中继 设置这条线路 优先级为0 中继名: 设置一个名字 Outgoi ...

  10. Day005作业

    1,有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": [&q ...