基础阶段:从最简单的示例代码开始,创建一个非常简单Demo。
进阶阶段:编写代码的同时,轻松学习掌握核心点的实现。
原理阶段:抽丝剥茧,通过源码,让你了解不同模块内部的原理。
实践阶段:对章节的内容做更深入的理解和研究,创建自定义具有扩展的模块。
推 荐 序
第一次和冯辉接触是几年前他邀请我参加济南.NET 俱乐部的活动,当时我因工作原因未能赴约,到现在仍深感遗憾。在年初的时候得知他正在撰写一本讲解.NET 框架的书,又有幸被邀请为该书写序,在忐忑之余,我也想借这个机会介绍一下自己在.NET 这条路的心路历程供读者参考。
在编程道路上,有两件事对我产生过很大的影响。第一件事可以追溯到 10 年前我第一次接触编程时,当时我使用.NET 中的 XNA 框架和 WP 框架开发了我的第一款手机 RPG 游戏并在 Lumia 820 上运行。这次成功开发游戏的经历极大地增强了我对从事编程的信心和对.NET 的兴趣。之后因为工作的需要,我对 WPF、WCF 和 ASP.NET 等不同方向的.NET 技术都有所涉猎。第二件事可以追溯到 Microsoft 宣布第一个开源的.NET 版本 ASP .NET VNext时,当时我就对 VNext 产生了极大的兴趣。在学习和推广 VNext 时,我结识了 Alex LEWIS、He Zhenxi、Xie Yang 等好友,之后我们一起创建了 NCC(.NET Core Community)社区。
最初,.NET Core 提供英文文档作为为数不多的使用参考,所以 NCC 社区刚刚成立时,我们做的第一件事是翻译ASP.NET Core 最初版本的英文文档。得益于Microsoft的开源策略,学习.NET Core 的另一个途径就是阅读 GitHub 官网上的源代码,我也由此养成了阅读开源项目代码的习惯,并且受益至今。受万物皆Services并且完全管道化的 ASP.NET Core 框架的启发,我设计了 AspectCore AOP 库,也在从事云原生开发之后在 Go 语言上继续参考ASP.NET Core 实现了以依赖注入作为内核的模块化开发框架。
即使对 .NET Core 已经相对熟悉,我在阅读本书样稿之后还是感觉眼前一亮。本书由浅入深地介绍了.NET Core 框架的核心部分,如依赖注入、配置与选项、中间件、缓存、日志、多线程等。我相信,不管是.NET Core 的初学者,还是想要继续进阶的中高级开发工程师,都能从这本书中获得很大的帮助。
近几年技术浪潮兴替,从大数据、移动互联网、云计算技术的兴起,再到如今人工智能、云原生技术的流行,.NET Core 完成了从运行时、BCL(Base Class Library,基础类库)到开发框架的一系列蜕变。得益于分层编译、重新实现的集合类、Span、网络/文件 I/O 等诸多细节的优化,.NET Core 不仅在最新几轮的 TechEmpower 性能评测中名列前茅,还可以搭配 C#,使.NET Core 成为事实上的云原生应用开发的最佳平台之一。谨以此序和同为.NET Core 的使用者及爱好者共勉之。
Apache SkyWalking PMC、NCC 社区创始人 刘浩杨
2022 年 8 月于杭州
前言
随着.NET 技术的发展,涌现出众多的设计思想和核心概念。值得开发人员关注的技术点有很多,如 ASP.NET Core 模块的设计、跨平台调试与部署等。
.NET 已经成为一种热门的现代技术体系,从.NET 彻底迈向跨平台和开源开始,已经历经了约 10 个版本。新一代的.NET 平台以拥抱云原生为核心,拥有更小的体积、更少的资源占用和更快的启动速度,并且支持水平扩展。
笔者也算是一个亲历者,从.NET Core 1.0 到现在,是一个从重生到繁荣的成长阶段,.NET 生态更加开放,开源社区越来越活跃,不仅支持传统的 x86 架构体系,还支持ARM 架构,并且获得了龙芯 LoongArch 架构及诸多新兴架构体系的踊跃支持,同时在工业、IoT、车联网等领域获得了广泛运用。无论是从社区参与度,还是从 NuGet 的下载量,都不难看出.NET 的发展速度。
.NET 具备原生的跨平台部署能力,是一种用于构建多端应用的开放平台。使用.NET 可以构建桌面应用、云服务、嵌入式应用及机器学习应用等,读者可以从 GitHub 官网的 dotnet组织中获取它所有的源代码。
计算机科学家 Alan J. Perlis 曾说过:不能影响你的编程思维方式的语言不值得学习和使用。由此可知,思维非常重要,只有了解一门编程语言或框架的基础模型与核心设计,才能将其应用到日常的编程中。
框架的设计过程是非常复杂的,笔者偏向于将复杂问题简单化,先研究它的实现方式,再了解它的设计模式,通过这一层层的推导过程,慢慢地了解整体脉络。阅读源代码是一个枯燥但会带来收获的过程。在本书中,笔者将框架设计方法,以及它们的实现(可扩展性)方式毫无保留地写下来。
本书集成了笔者在工作中使用.NET 开发应用程序的编写经验和调试经验,同时结合了笔者关于 Linux 平台和容器云平台的使用经验。通过本书,笔者将介绍每个模块的核心设计与实现,因为要想在生产环境中大规模使用,就需要在这个复杂而庞大的项目中抓到主线,了解内部的实现和调试技术,以便快速定位问题和解决问题。
本书对 ASP.NET Core 的部分核心内容进行了深入解析,在这个基础上延伸内容,以及自定义扩展实例,初学者可以更深入地了解 ASP.NET Core 内部的运作方式。本书也涵盖了很多基础知识,如垃圾回收、调试、线程等,除此之外,添加了部署方面的内容,将应用程序部署到宿主机、Docker 和 Kubernetes 中。
笔者通过对.NET 技术的原理进行剖析及实例的演示,帮助读者快速熟悉框架的核心设计及实现原理。希望读者在阅读完本书后,能够将书中的内容学以致用,使用.NET 构建出高性能的应用程序,同时为开源社区添砖加瓦。
关于勘误
完成本书绝不是一件简单的事情。虽然笔者力争保证内容的准确性,并且花费了很长的时间和大量的精力核对书中的文字和内容,但个人水平有限,书中难免存在一些不足之处,望广大读者批评指正。欢迎发邮件至 hueifeng2020@outlook.com,期待您的反馈。
致谢
感谢邹溪源、严振范、锅美玲、李卫涵、胡心(Azul X)、管生玄、黄新成(一线码农)和周杰等人对本书的审核和校对,同时感谢家人、朋友和同事在笔者编写本书期间给予的支持与鼓励。
感谢符隆美编辑对我的悉心指导,她对本书的审核和建议使我的写作水平有了很大的提高,在此表示感谢!