书接上文:上一节中,我们已经实现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. ionic 技术要点

    1.当遇到数据模型改变了,但是页面渲染的数据却没有改变的时候,尝试执行 $scope.$apply(): 2.时间的定义及监听: 定义事件 showNewMsg并从scope往下广播: $scope. ...

  2. ‎CocosBuilder 学习笔记(1) CCBReader 解析.ccbi文件流程

    1. 简介 CocosBuilder是免费开源的Cocos2d UI编辑器. .ccb文件是CCB项目的原始文件. .ccbi文件是CCB项目发布后的生成的二进制文件.CCBReader可以快速通过该 ...

  3. Condition控制线程通信

    Condition控制线程通信 一.前言 java.util.concurrent.locks.Condition 接口描述了可能会与锁有关联的条件变量.这些变量在用法上与使用Object.wait ...

  4. H5调用相机和相册更换头像

    需求:H5调用手机的相机和相册从而实现更换头像的功能 这个功能是很常用的一个功能,因此做一个记录. 1.在头像img下加一个文件输入框 <input type="file" ...

  5. About 睡觉觉吃饭饭

    rdc 的日常作息: 11:50 左右起床,洗漱后飞奔到超市买咖啡饼干,然后飞奔到实验室. 开始被比赛打:比赛前期觉没睡醒,题没读懂就开始乱写,签到签不上,比赛中期处于要被饿死的状态. 赛后吃饭饭,随 ...

  6. codeforces 864 E. Fire(背包+思维)

    题目链接:http://codeforces.com/contest/864/problem/E 题解:这题一看就很像背包但是这有3维限制也就是说背包取得先后也会对结果有影响.所以可以考虑sort来降 ...

  7. HDU 5793 A Boring Question 多校训练

    There are an equation. ∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1000000007=?∑0≤k1,k2,⋯km≤n∏1⩽j<m(kj+1kj)%1 ...

  8. [HNOI2002]沙漠寻宝 题解

    一道大模拟 代码 #include <cstdio> #include <iostream> #include <cstring> #include <str ...

  9. TLS加密远程连接Docker

    <Docker远程连接设置>一文讲述了开启Docker远程连接的方法,但那种方法不安全,因为任何客户端都可以通过Docker服务的IP地址连接上去,今天我们就来学习Docker官方推荐的安 ...

  10. 告别组件之教你使用原生js和css写移动端轮播图

    在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. ...