摘要:之前写了一系列关于ASP.NET Core的文章,现在将它们进行的分类整理。在博客停更了几个月之后,我决定继续对这个系列进行完善,旨在打造一个全网最系统、深入的ASP.NET Core知识库。本系列的大部分内容来源于《ASP.NET Core 3框架解析》(有修改),也会包含一些新的内容。 阅读全文
posted @ 2020-11-10 08:12 Artech 阅读(1971) 评论(9) 推荐(22) 编辑
摘要:《ASP.NET Core 3框架揭秘》于本月19日在下午京东正式开始预售,并在半天之内销售近一千套,随后迅速占据京东科技IT图书畅销榜榜首的位置。为期一周的限时五折优惠将在今天24时结束。有兴趣的朋友可以加入本书读者群购买。 阅读全文
posted @ 2020-03-20 12:22 Artech 阅读(12202) 评论(57) 推荐(25) 编辑
摘要:在前两篇文章中,我们先后介绍了CallContext(IllogicalCallContext和LogicalCallContext)、AsyncLocal和SynchronizationContext,它们都是线程执行上下文的一部分。本篇介绍的安全上下文(SecurityContext)同样是执行上下文的一部分,它携带了的身份和权限相关的信息决定了执行代码拥有的控制权限。 阅读全文
posted @ 2020-11-27 09:04 Artech 阅读(563) 评论(2) 推荐(6) 编辑
摘要:一般情况下,我们可以将某项操作分发给任意线程来执行,但有的操作确实对于执行的线程是有要求的,最为典型的场景就是:GUI针对UI元素的操作必须在UI主线程中执行。将指定的操作分发给指定线程进行执行的需求可以通过同步上下文(SynchronizationContext)来实现。你可能从来没有使用过SynchronizationContext,但是在基于Task的异步编程中,它却总是默默存在。今天我们就来认识一下这个SynchronizationContext对象。 阅读全文
posted @ 2020-11-26 08:38 Artech 阅读(719) 评论(2) 推荐(13) 编辑
摘要:线程是操作系统能够进行运算调度的最小单位,操作系统线程进一步被封装成托管的Thread对象,手工创建并管理Thread对象已经成为了所能做到的对线程最细粒度的控制了。后来我们有了ThreadPool,可以更加方便地以池化的方式来使用线程。最后,Task诞生,它结合async/await关键字给与我们完美异步编程模式。但这一切让我们的编程体验越来越好,但是离线程的本质越来越远。被系列文章从“执行上下文传播”这个令开发者相对熟悉的角度来聊聊重新认识我们似乎已经很熟悉的主题。 阅读全文
posted @ 2020-11-25 09:26 Artech 阅读(1425) 评论(6) 推荐(24) 编辑
摘要:ASP.NET Core的请求处理管道由一个服务器和一组中间件构成,但对于面向传输层的服务器来说,它其实没有中间件的概念。当服务器接收到请求之后,会将该请求分发给一个处理器进行处理,对服务器而言,这个处理器就是一个HTTP应用,此应用通过IHttpApplication接口来表示。由于服务器是通过IServer接口表示的,所以可以将ASP.NET Core框架的核心视为由IServer和IHttpApplication对象组成的管道 阅读全文
posted @ 2020-11-24 09:14 Artech 阅读(348) 评论(3) 推荐(6) 编辑
摘要:ASP.NET Core请求处理管道由一个服务器和一组有序排列的中间件构成,所有中间件针对请求的处理都在通过HttpContext对象表示的上下文中进行。由于应用程序总是利用服务器来完成对请求的接收和响应工作,所以原始请求上下文的描述由注册的服务器类型来决定。但是ASP.NET Core需要在上层提供具有一致性的编程模型,所以我们需要一个抽象的、不依赖具体服务器类型的请求上下文描述,这就是本章着重介绍的HttpContext。 阅读全文
posted @ 2020-11-23 08:53 Artech 阅读(493) 评论(0) 推荐(6) 编辑
摘要:一个ASP.NET Core应用的核心就是由一个服务器和一组有序中间件组成的请求处理管道,服务器只负责监听、接收和分发请求,以及最终完成对请求的响应,所以一个ASP.NET Core应用针对请求的处理能力和处理方式由注册的中间件来决定。一个ASP.NET Core在启动过程中的核心工作就是注册中间件,本节主要介绍应用启动过程中以中间件注册为核心的初始化工作。 阅读全文
posted @ 2020-11-20 08:55 Artech 阅读(486) 评论(0) 推荐(3) 编辑
摘要:HeaderForwarder组件不仅能够从当前接收请求提取指定的HTTP报头,并自动将其添加到任何一个通过HttpClient发出的请求中,它同时也提供了一种基于Context/ContextScope的编程模式是我们可以很方便地将任何报头添加到指定范围内的所有由HttpClient发出的请求中。 阅读全文
posted @ 2020-11-19 08:54 Artech 阅读(650) 评论(0) 推荐(5) 编辑
摘要:如今的应用部署逐渐向微服务化发展,导致一个完整的事务往往会跨越很多的应用或服务,出于分布式链路跟踪的需要,我们往往将从上游服务获得的跟踪请求报头无脑地向下游服务进行转发。本文介绍的这个名为HeaderForwarder的组件可以帮助我们完成针对指定HTTP请求报头的自动转发。 阅读全文
posted @ 2020-11-18 08:55 Artech 阅读(1111) 评论(2) 推荐(9) 编辑
摘要:我们知道“依赖注入”已经成为了.NET Core的基本编程模式,表示当前请求上下文的HttpContext可以通过注入的IHttpContextAccessor服务来提取。有时候我们会使用一些由于某些原因无法使用依赖注入的组件,我们如何提取当前HttpContext呢? 阅读全文
posted @ 2020-11-17 10:26 Artech 阅读(1508) 评论(3) 推荐(7) 编辑
摘要:基于IHostBuilder/IHost的承载系统通过IHostEnvironment接口表示承载环境,我们利用它不仅可以得到当前部署环境的名称,还可以获知当前应用的名称和存放内容文件的根目录路径。对于一个Web应用来说,我们需要更多的承载环境信息,额外的信息定义在IWebHostEnvironment接口中。 阅读全文
posted @ 2020-11-16 08:56 Artech 阅读(1788) 评论(1) 推荐(10) 编辑
摘要:IHostBuilder接口中定义了ConfigureHostConfiguration方法和ConfigureAppConfiguration方法,它们可以帮助我们设置面向宿主(IHost对象)和应用(承载服务)的配置。针对配置的初始化也可以借助IWebHostBuilder接口来完成。 阅读全文
posted @ 2020-11-13 08:45 Artech 阅读(447) 评论(1) 推荐(3) 编辑
摘要:基于IHostBuilder/IHost的服务承载系统建立在依赖注入框架之上,它在服务承载过程中依赖的服务(包括作为宿主的IHost对象)都由代表依赖注入容器的IServiceProvider对象提供。在定义承载服务时,也可以采用依赖注入方式来消费它所依赖的服务。作为依赖注入容器的IServiceProvider对象能否提供我们需要的服务实例,取决于相应的服务注册是否预先添加到依赖注入框架中。 阅读全文
posted @ 2020-11-12 08:46 Artech 阅读(2038) 评论(10) 推荐(9) 编辑
摘要:HTTP协议自身的特性决定了任何一个Web应用的工作模式都是监听、接收并处理HTTP请求,并且最终对请求予以响应。HTTP请求处理是管道式设计典型的应用场景:可以根据具体的需求构建一个管道,接收的HTTP请求像水一样流入这个管道,组成这个管道的各个环节依次对其做相应的处理。 阅读全文
posted @ 2020-11-11 08:46 Artech 阅读(673) 评论(3) 推荐(9) 编辑
摘要:之前写了一系列关于ASP.NET Core的文章,现在将它们进行的分类整理。在博客停更了几个月之后,我决定继续对这个系列进行完善,旨在打造一个全网最系统、深入的ASP.NET Core知识库。本系列的大部分内容来源于《ASP.NET Core 3框架解析》(有修改),也会包含一些新的内容。 阅读全文
posted @ 2020-11-10 08:12 Artech 阅读(1971) 评论(9) 推荐(22) 编辑
摘要:昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好解决方案。这是一个挺有意思的问题,我们可以通过两种方案实现了这个需求。 阅读全文
posted @ 2020-04-07 09:29 Artech 阅读(5096) 评论(14) 推荐(33) 编辑
摘要:《ASP.NET Core 3框架揭秘》勘误表 阅读全文
posted @ 2020-04-04 18:37 Artech 阅读(4096) 评论(70) 推荐(12) 编辑
摘要:传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于PerformanceCounter类型的性能计数API在.NET Core下被彻底放弃。在.NET Core中的性能计数器具有新的玩法。 阅读全文
posted @ 2020-04-03 08:30 Artech 阅读(3205) 评论(6) 推荐(8) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有深刻的理解,知道了ASP.NET Core框架针对每个请求的处理流程。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架。真实的MVC框架其实很复杂,所以我们依然按照类似的方式大刀阔斧地“砍掉”了很多“细枝末节”,利用一个Mini版本的模拟框架将真实ASP.NET Core MVC最核心的部分展示出来。和Mini版本的ASP.NET Core框架一样,这个Mini版的ASP.NET Core MVC框架同样采用真实框架一致的设计,并且是同样可以直接运行的。 阅读全文
posted @ 2020-04-01 08:27 Artech 阅读(5051) 评论(0) 推荐(10) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。 阅读全文
posted @ 2020-03-31 08:41 Artech 阅读(2262) 评论(2) 推荐(6) 编辑
摘要:ASP.NET Core提供了多种认证方式,它们的实现都基于相同的认证模型。本篇文章提供了一个极简的实例让读者体验如何在ASP.NET Core应用中实现认证、登录和注销 阅读全文
posted @ 2020-03-25 08:37 Artech 阅读(3162) 评论(2) 推荐(7) 编辑
摘要:ASP.NET Core框架中的很多核心对象都是通过依赖注入方式提供的,如用来对应用进行初始化的Startup对象、中间件对象,以及ASP.NET Core MVC应用中的Controller对象和View对象等,所以我们可以在定义它们的时候采用注入的形式来消费已经注册的服务。下面简单介绍几种服务注入的应用场景。 阅读全文
posted @ 2020-03-24 08:24 Artech 阅读(6761) 评论(6) 推荐(11) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。在对本章内容展开介绍之前,顺便作一下广告:《ASP.NET Core 3框架揭秘》已经开始销售,限时5折优惠还有最后3天,有兴趣的从这里入群购买。 阅读全文
posted @ 2020-03-23 08:27 Artech 阅读(1794) 评论(0) 推荐(3) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。在对本章内容展开介绍之前,顺便作一下广告:《ASP.NET Core 3框架揭秘》已经开始销售,现时5折优惠还有最后4天,有兴趣的从这里购买。 阅读全文
posted @ 2020-03-22 12:44 Artech 阅读(4198) 评论(5) 推荐(17) 编辑
摘要:《ASP.NET Core 3框架揭秘》于本月19日在下午京东正式开始预售,并在半天之内销售近一千套,随后迅速占据京东科技IT图书畅销榜榜首的位置。为期一周的限时五折优惠将在今天24时结束。有兴趣的朋友可以加入本书读者群购买。 阅读全文
posted @ 2020-03-20 12:22 Artech 阅读(12202) 评论(57) 推荐(25) 编辑
摘要:在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的《ASP.NET Core 3框架揭秘》,先将它们汇总在这里。如果对《ASP.NET Core 3框架揭秘》感兴趣,可以通过这里加入读者群。 阅读全文
posted @ 2020-03-16 08:13 Artech 阅读(12829) 评论(14) 推荐(42) 编辑
摘要:实际上HostBuilder对象并没有在实现的Build方法中调用构造函数来创建Host对象,该对象利用作为依赖注入容器的IServiceProvider对象创建的。为了可以采用依赖注入框架来提供构建的Host对象,HostBuilder必须完成前期的服务注册工作。总地来说,HostBuilder针对Host对象的构建大体可以划分为5个步骤。 阅读全文
posted @ 2020-03-12 08:24 Artech 阅读(1128) 评论(4) 推荐(4) 编辑
摘要:2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架,并且利用这个 “极简” 的模拟框架阐述了ASP.NET Core框架最核心、最本质的东西。整个框架涉及到的核心代码不会超过200行,涉及到7个核心的对象。由于ASP.NET Core 3.X采用了不同的应用承载方式,所以我们将这个模拟框架升级到3.x版本。 阅读全文
posted @ 2020-03-09 08:16 Artech 阅读(7517) 评论(18) 推荐(57) 编辑
摘要:我们在《总体设计[上篇]》和《总体设计[下篇]》中通过对IHostedService、IHost和IHostBuider这三个接口的介绍让读者朋友们对服务承载模型有了大致的了解。接下来我们从抽象转向具体,看看承载系统针对该模型的实现是如何落地的。 阅读全文
posted @ 2020-03-08 12:34 Artech 阅读(2432) 评论(3) 推荐(9) 编辑
摘要:《ASP.NET Core 3框架揭秘》(上下册)在本月正式上市,为此出版社专门创建了一个微信群,。由于目前人数已经超过200人,只能通过邀请方能加入。有兴趣的朋友可以搜索微信账号“broadview002”(博文小丸子)并添加为好友,并在申请消息中指定本书书号“38462”,出版社工作人员将自动帮你添加到该微信群。 阅读全文
posted @ 2020-03-07 08:00 Artech 阅读(6607) 评论(54) 推荐(69) 编辑
摘要:前面的实例演示了服务承载的基本编程模式,接下来我们从设计的角度来重新认识服务承载模型。总的来说,服务承载模型主要由三个核心对象组成:多个通过IHostedService接口表示的服务被承载于通过IHost接口表示的宿主上,IHostBuilder接口表示IHost对象的构建者。 阅读全文
posted @ 2020-03-05 08:01 Artech 阅读(1485) 评论(6) 推荐(6) 编辑
摘要:前面的实例演示了服务承载的基本编程模式,接下来我们从设计的角度来重新认识服务承载模型。总的来说,服务承载模型主要由如下图所示的三个核心对象组成:多个通过IHostedService接口表示的服务被承载于通过IHost接口表示的宿主上,IHostBuilder接口表示IHost对象的构建者。 阅读全文
posted @ 2020-03-04 08:12 Artech 阅读(2989) 评论(3) 推荐(13) 编辑
摘要:借助.NET Core提供的承载(Hosting)系统,我们可以将任意一个或者多个长时间运行(Long-Running)的服务寄宿或者承载于托管进程中。ASP.NET Core应用仅仅是该承载系统的一种典型的服务类型而已,任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载。 阅读全文
posted @ 2020-03-03 09:16 Artech 阅读(1624) 评论(2) 推荐(6) 编辑
摘要:借助.NET Core提供的承载(Hosting)系统,我们可以将任意一个或者多个长时间运行(Long-Running)的服务寄宿或者承载于托管进程中。ASP.NET Core应用仅仅是该承载系统的一种典型的服务类型而已,任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载。 阅读全文
posted @ 2020-03-02 11:17 Artech 阅读(3051) 评论(7) 推荐(13) 编辑
摘要:Options模型本身与配置系统完全没有关系,但是配置在大部分情况下会作为绑定Options对象的数据源,所以有必要将两者结合在一起。与《扩展与定制》演示的两个例子一样,针对配置系统的集成同样是通过定制Options模型相应的对象来实现的 阅读全文
posted @ 2020-01-20 08:36 Artech 阅读(2245) 评论(10) 推荐(7) 编辑
摘要:由于Options模型涉及的核心对象最终都注册为相应的服务,所以从原则上讲这些对象都是可以定制的,下面提供几个这样的实例。由于Options模型提供了针对配置系统的集成,所以可以采用配置文件的形式来提供原始的Options数据,可以直接采用反序列化的方式将配置文件的内容转换成Options对象。 阅读全文
posted @ 2020-01-19 08:36 Artech 阅读(2766) 评论(8) 推荐(12) 编辑
摘要:《Options模型》介绍了组成Options模型的4个核心对象以及它们之间的交互关系,读者对如何得到Options对象的实现原理可能不太了解,本篇文章主要介绍依赖注入的相关内容。既然我们能够利用IServiceProvider对象提供的IOptions 阅读全文
posted @ 2020-01-16 08:09 Artech 阅读(2525) 评论(11) 推荐(11) 编辑
摘要:IOptionsFactory解决了Options的创建与初始化问题,但由于它自身是无状态的,所以Options模型对Options对象实施缓存可以获得更好的性能。Options模型中针对Options对象的缓存由IOptionsMonitorCache对象来完成。Options模型之所以将表示缓存的接口命名为IOptionsMonitorCache,是因为缓存最初是为IOptionsMonitor对象服务的,该对象旨在实现针对承载Options对象的原始数据源的监控,并在检测到数据更新后及时替换缓存的Options对象。 阅读全文
posted @ 2020-01-14 08:38 Artech 阅读(1566) 评论(16) 推荐(13) 编辑
摘要:通过前面演示的几个实例(配置选项的正确使用方式[上篇]、配置选项的正确使用方式[下篇]),我们已经对基于Options的编程方式有了一定程度的了解,下面从设计的角度介绍Options模型。我们演示的实例已经涉及Options模型的3个重要的接口,它们分别是IOptions 阅读全文
posted @ 2020-01-13 08:51 Artech 阅读(1773) 评论(4) 推荐(9) 编辑
摘要:依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。 阅读全文
posted @ 2020-01-10 08:55 Artech 阅读(3588) 评论(6) 推荐(35) 编辑
摘要:依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。 阅读全文
posted @ 2020-01-09 08:57 Artech 阅读(3313) 评论(9) 推荐(15) 编辑