自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个 技术“译”民 的『技术译站』,微信公众号:技术译站

翻译和分享一些 IT 技术文章, 微信公众号:技术译站

  • 博客(58)
  • 收藏
  • 关注

翻译 C# 9.0 正式发布了(C# 9.0 on the record)

翻译自 Mads Torgersen 2020年11月10日的博文《C# 9.0 on the record》 1,Mads Torgersen 是微软 C# 语言的首席设计师,也是微软 .NET 团队的项目群经理。C# 9.0 正式发布正式宣布:C# 9.0 发布了! 早在5月,我就写了一篇关于 C# 9.0 计划的博文 2,以下是该帖子的更新版本,以匹配我们最终实际交付的产品。对于 C# 的每一个新版本,我们都在努力让常见编码场景的实现变得更加清晰和简单,C# 9.0 也不例外。这次特别关注的.

2020-11-13 16:10:32 476

翻译 Blazor 模板化组件开发指南

翻译自 Waqas Anwar 2021年4月15日的文章 《A Developer’s Guide To Blazor Templated Components》 1在我之前的一篇文章 Blazor 组件入门指南中,我介绍了组件参数,并向您展示了如何将数据作为参数传递给 Blazor 组件以定制化其功能。在这篇文章中,我将更进一步向您展示,如何将一个或多个 UI 模板作为参数传递给一个称之为模板化组件的不同类型的 Blazor 组件。下载源码2Blazor 模板化组件概述Blazor .

2021-08-30 01:35:08 419

翻译 Blazor 路由及导航开发指南

翻译自 Waqas Anwar 2021年4月2日的文章 《A Developer’s Guide To Blazor Routing and Navigation》 1检查传入的请求 URL 并将它们导航到对应的视图或页面是每个单页应用程序 (SPA) 框架的基本功能。Blazor Server 和 WebAssembly 应用程序也同样支持使用一些内置组件和服务进行路由。在本教程中,我将向您介绍在 Blazor 应用程序中实现路由所需了解的所有内容。Blazor 应用程序中的路由配置在开始为.

2021-08-30 01:31:42 992

翻译 Blazor 组件之间使用 EventCallback 进行通信

翻译自 Waqas Anwar 2021年3月28日的文章 《Communication between Blazor Components using EventCallback》 1Blazor 应用程序是相互交互的多个 Blazor 组件的集合,我们可以在其他父组件中使用子组件。在实际的应用程序中,将数据或事件信息从一个组件传递到另一组件是一种十分常见的场景。您可能会有一个页面,其中一个组件中发生的用户操作需要更新其他组件中的某些 UI。通常使用 EventCallback 委托来处理这种类.

2021-08-10 13:22:09 783

翻译 Blazor 事件处理开发指南

翻译自 Waqas Anwar 2021年3月25日的文章 《A Developer’s Guide To Blazor Event Handling》 1如果您正在开发交互式 Web 应用程序,根据不同的应用程序事件和用户操作动态更新用户界面是十分常见的做法。这些操作会触发事件,而作为开发人员,我们的工作是使用一些事件处理技术来处理这些事件。Blazor 内置支持处理多种事件,比如 onclick、onchange 和 onmousemove 等,并为开发者提供了处理这些事件的多种方式。我将在本.

2021-08-03 15:22:43 461

翻译 Blazor 数据绑定开发指南

翻译自 Waqas Anwar 2021年3月21日的文章 《A Developer’s Guide to Blazor Data Binding》 1现如今,大多数 Web 应用程序要么是在页面上显示某种数据,要么是使用表单从用户那里收集数据。这意味着每个 SPA 框架都必须支持数据绑定,以便开发者可以将数据与 label、form 控件等元素进行绑定。Blazor 组件内置了对数据绑定的支持,还使用了多种技术来同时支持单向和双向数据绑定。在本教程中,我将通过一个简单的卡片设计器示例来介绍 Bl.

2021-07-26 15:27:10 430

翻译 Blazor 组件入门指南

翻译自 Waqas Anwar 2021年3月19日的文章 《A Beginner’s Guide to Blazor Components》 1Blazor 应用程序是组件的组合,这些组件不仅负责呈现用户界面,还协同工作以促进用户交互。它们是 Blazor 应用程序的主要构建块,大多数 Blazor 功能都是围绕组件展开的。在本教程中,我将向您详细介绍组件,并向您展示在 Blazor 应用程序中创建和使用组件的多种技术。下载源码2Blazor 组件概述Blazor 组件是 UI 的一个自.

2021-07-18 23:32:26 933

翻译 Blazor Server 和 WebAssembly 应用程序入门指南

翻译自 Waqas Anwar 2021年3月12日的文章 《A Beginner’s Guide To Blazor Server and WebAssembly Applications》 1如果您一直紧跟 .NET 世界的最新发展趋势,那么现在您一定听说过 Blazor。目前在 .NET 社区中有很多关于 Blazor 的宣传,这种宣传最常见的原因是它引入了一些大多数 .NET 开发人员十几年来一直梦寐以求的东西,即:既可以在服务端又可以在浏览器中运行 C# 的能力。Blazor 允许我们使用.

2021-07-07 19:01:51 765

原创 .NET Worker Service 部署到 Linux 作为 Systemd Service 运行

上一篇文章我们了解了如何将.NET Worker Service 作为 Windows 服务运行,今天我接着介绍一下如何将 Worker Service 部署到 Linux 上,并作为 Systemd Service 运行。我在本文中要覆盖的内容包含:作为 Linux 控制台程序运行作为 Systemd Service 运行开机自动启动、查看日志信息创建项目并发布下载 Worker Service 源码我将基于上一篇文章中的 Worker Service 源码来修改,如果您安装有 git,

2021-07-02 19:57:47 621

原创 .NET Worker Service 作为 Windows 服务运行及优雅退出改进

上一篇文章我们了解了如何为 Worker Service 添加 Serilog 日志记录,今天我接着介绍一下如何将 Worker Service 作为 Windows 服务运行。我曾经在前面一篇文章的总结中提到过可以使用 sc.exe 实用工具将 Worker Service 安装为 Windows 服务运行,本文中我就来具体阐述一下如何实现它。SC 是什么?sc.exe 是包含于 Windows SDK 的,可用于控制服务的命令行实用程序,它的命令对应于服务控制管理器(SCM)1 提供的函数。服务

2021-06-29 14:59:29 338

原创 .NET Worker Service 添加 Serilog 日志记录

前面我们了解了 .NET Worker Service 的入门知识1 和 如何优雅退出 Worker Service 2,今天我们接着介绍一下如何为 Worker Service 添加 Serilog 日志记录。在实际的生产环境中,应用程序中记录日志是非常宝贵的。在许多情况下,开发人员无法直接访问生产环境来调试问题。高质量的日志记录为解决线上问题提供了线索和依据。日志记录是将应用程序操作和状态记录到辅助接口的过程。.NET 日志记录框架.NET 中有很多默认的日志记录提供程序3,它们可以将日志输

2021-06-06 23:35:39 429

原创 .NET Worker Service 如何优雅退出

上一篇文章中我们了解了 .NET Worker Service 的入门知识1,今天我们接着介绍一下如何优雅地关闭和退出 Worker Service。Worker 类从上一篇文章中,我们已经知道了 Worker Service 模板为我们提供三个开箱即用的核心文件,其中 Worker 类是继承自抽象基类 BackgroundService 的,而 BackgroundService 实现了 IHostedService 接口。最终 Worker 类会被注册为托管服务,我们处理任务的核心代码就是写在 Wo

2021-05-18 13:58:57 285

翻译 .NET 中的 Worker Service 入门介绍

翻译自 Steve Gordon 2020年3月30日的文章 《WHAT ARE .NET WORKER SERVICES?》 1随着 .NET Core 3.0 的发布,ASP.NET 团队引入了一个新的 Worker Service 项目模板,该模板作为 .NET SDK 的一部分发布。在本文中,我将向您介绍这个新模板,以及使用它开发的一些实际的服务示例。译者注:请先完成以下准备工作,以便于您理解本文。1、下载并安装最新的 .NET SDK:https://dotnet.microso.

2021-05-10 00:45:53 307

翻译 一图看懂 ASP.NET Core 中的服务生命周期

翻译自 Waqas Anwar 2020年11月8日的文章 《ASP.NET Core Service Lifetimes (Infographic)》 1ASP.NET Core 支持依赖关系注入(DI)软件设计模式,该模式允许我们注册服务、控制如何实例化这些服务并将其注入到不同的组件中。一些服务可以在短周期内实例化,并且仅在特定的组件和请求中可用;一些实例仅被实例化一次,并在整个应用程序生命周期中可用。这就是 ASP.NET Core 中可用的服务生命周期,共三种,下面我们来分别介绍一下。Si.

2021-04-26 23:58:32 577

翻译 创建支持依赖注入、Serilog 日志和 AppSettings 的 .NET 5 控制台应用

翻译自 Mohamad Lawand 2021年3月24日的文章 《.NET 5 Console App with Dependency Injection, Serilog Logging, and AppSettings》 1在本文中,我们将构建一个 .NET 5 控制台应用程序,该应用程序支持依赖注入、日志记录和 appsettings 配置。你也可以在 YouTube 上观看完整的视频2,还可以在 GitHub 上下载源代码3。我们要用到的开发工具有:Visual Studio C.

2021-04-26 23:55:55 482

翻译 Asp.Net Core 5 REST API 使用 RefreshToken 刷新 JWT - Step by Step

翻译自 Mohamad Lawand 2021年1月25日的文章 《Refresh JWT with Refresh Tokens in Asp.Net Core 5 Rest API Step by Step》 1在本文中,我将向您演示如何在 Asp.Net Core REST API 中将 Refresh Token 添加到 JWT 身份验证。我们将覆盖的一些主题包含:Refresh Token、一些新的 Endpoints 功能和 JWT(JSON Web Token)。你也可以在 YouT.

2021-04-15 20:04:33 654

翻译 Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step

翻译自 Mohamad Lawand 2021年1月22日的文章 《Asp Net Core 5 Rest API Authentication with JWT Step by Step》在本文中,我将向您展示如何向我们的 Asp.Net Core REST API 添加 JWT 身份验证。我们将介绍的主题包含注册、登录功能以及如何使用 JWT (Json Web Tokens)和 Bearer 身份验证。你也可以在 YouTube 上观看完整的视频,还可以下载源代码。这是 API 开发系列.

2021-04-15 19:53:23 353

翻译 Asp.Net Core 5 REST API - Step by Step

翻译自 Mohamad Lawand 2021年1月19日的文章 《Asp.Net Core 5 Rest API Step by Step》 1在本文中,我们将创建一个简单的 Asp.Net Core REST API Todo 应用程序,在其中我们可以添加、编辑、删除和查看待办事项,并且将使用 SQLite 来存储数据。你也可以在 YouTube 上观看完整的视频2,还可以下载源代码3。这是 API 开发系列的第一部分,后面还有:Part 2:Asp.Net Core 5 REST A.

2021-04-12 19:35:38 204

翻译 JWT 介绍 - Step by Step

翻译自 Mohamad Lawand 2021年3月11日的文章 《Intro to JWT - Step by Step》 1在本文中,我将向您介绍 JWT2。我们今天要讲的内容包含:JWT 是什么我们应该在什么时候使用它JWT 与 Session Id 比较JWT 结构JWT 签名JWT 是什么JWT (JSON Web Token) 是一个开放标准3,它定义了一种以紧凑和自包含的方法,用于在双方之间安全地传输编码为 JSON 对象的信息。因此,简单来说,它是 JSON .

2021-03-31 16:14:14 125

翻译 在 .NET Core 5 中集成 Create React app

翻译自 Camilo Reyes 2021年2月22日的文章 《Integrate Create React app with .NET Core 5》 1Camilo Reyes 演示了如何将 Create React app 与 .NET Core 集成,以生成一个移除了几个依赖项的脚手架。Create React app 是社区中创建一个全新 React 项目的首选方式。该工具生成了基础的脚手架用于开始编写代码,并抽象出了许多具有挑战性的依赖项。webpack 和 Babel 之类的 Reac.

2021-03-27 17:54:25 250

翻译 C# 中的动态类型

翻译自 Camilo Reyes 2018年10月15日的文章 《Working with the Dynamic Type in C#》 1.NET 4 中引入了动态类型。动态对象使您可以处理诸如 JSON 文档之类的结构,这些结构的组成可能要到运行时才能知道。在本文中,Camilo Reyes 解释了如何使用动态类型。.NET 4.0 中引入的 dynamic 关键字为 C# 编程带来了一个范式转变。对于 C# 程序员来说,强类型系统之上的动态行为可能会让人感到不适 —— 当您在编译过程中失去类.

2021-03-16 18:54:31 229

翻译 在 .NET Core 中构建 REST API

翻译自 Camilo Reyes 2020年8月26日的文章 《Build a REST API in .NET Core》 1REST API 可以使用简单的动词(如 POST、PUT、PATCH 等)将大型解决方案背后的复杂性隐藏起来。在本文中,Camilo Reyes 解释了如何在 .NET Core 中创建 REST API。扩展大型复杂解决方案的一种方法是将它们分解为 REST 微服务。微服务开启了 API 背后的业务逻辑的可测试性和可重用性。因为 REST API 可以被多个客户端重用,.

2021-03-16 18:50:42 212

原创 C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项

在 2020 年的最后一天,博客园发起了一个开源项目:基于 .NET 的博客引擎 fluss,我抽空把源码下载下来看了下,发现在属性的定义中,有很多地方都用到了 null!,如下图所示:这是什么用法呢?之前没有在项目中用过,所以得空就研究了一下。以前,! 运算符用来表示 “否”,比如不等于 !=。在 C# 8.0 以后,! 运算符有了一个新意义—— null 包容运算符,用来控制类型的可空性。要了解 null 包容运算符,首先就要了解可为 null 的引用类型。可为 null 的引用类型C# 8.

2021-01-12 19:18:31 680

原创 如何禁用控制台窗口的关闭按钮?

这是一段古老的代码,也是我以前经常用到的代码。虽然现在和以后基本上都不会再用到它了,但是在特定的场景中,它很好用。使用场景有时候,我们需要编写一个具有一定处理逻辑的控制台程序,这比编写 Windows 服务要简单一些。但是,我们要防止不小心点击到控制台窗口右上角的关闭按钮而导致程序非正常退出。于是就有了如这篇文章标题所述的一个简单的需求。代码实现查找 Windows 窗口和禁用 Windows 窗口的按钮,需要用到 Windows API FindWindow 、GetSystemMenu 和 Re

2021-01-12 19:16:18 564

翻译 Windows Terminal 新手入门

翻译自 Kayla Cinnamon 2020年12月17日的文章《Getting Started with Windows Terminal》 1安装Windows Terminal(Windows 终端)有两个不同的版本:Windows Terminal2 和 Windows Terminal 预览版3。两个版本都可以从 Microsoft Store 和 GitHub 发布页4下载。必备条件不管要运行哪一个 Windows Terminal 版本,您的机器必须是 Windows 10 19.

2020-12-31 19:03:26 594

翻译 在 WSL Ubuntu 上使用 .NET 进行跨平台开发新手入门

翻译自 haydenb 2020年6月3日的文章《Getting started with cross-platform development using .NET on Ubuntu on WSL》 1.NET 是一个开源软件框架,用于在 Linux、Windows 和 macOS 上构建跨平台应用程序。WSL 上的 Ubuntu 2允许您同时为 Ubuntu 和 Windows 构建和测试应用程序。当我们把这些融合在一起时会发生什么呢?这篇博客将演示如何在 WSL 上安装 .NET 开发栈,并构.

2020-12-31 18:59:43 381

原创 C# 中 ConcurrentDictionary 一定线程安全吗?

根据 .NET 官方文档的定义:ConcurrentDictionary<TKey,TValue> Class 表示可由多个线程同时访问的线程安全的键/值对集合。这也是我们在并发任务中比较常用的一个类型,但它真的是绝对线程安全的吗?仔细阅读官方文档,我们会发现在文档的底部线程安全性小节里这样描述:ConcurrentDictionary<TKey,TValue> 的所有公共和受保护的成员都是线程安全的,可从多个线程并发使用。但是,通过一个由 ConcurrentDictiona

2020-12-22 18:06:14 743

翻译 如何在 Windows 10 上安装 WSL 2

翻译自 Joey Sneddon 2020年10月30日的文章《How to Install WSL 2 on Windows 10》 1如果您想在最新的 Windows 版本中尝试经过改进的 Windows 子系统 Linux 2 (即 WSL 2) 2,要怎么做呢?我们在本文中介绍了安装它所需要做的所有事情。WSL 2 是微软早在 2017 年推出的 WSL 的原始版本的重大升级。WSL 2 不仅仅是版本的升级。它更快、更通用,并且使用真正的 Linux 内核。未来的 Linux 内核更新甚至.

2020-12-15 19:24:45 344

原创 连接数从异常到 300 到 5(RDS MySQL 的一个大坑•后记)

在 《记 RDS MySQL 的一个大坑》 中,我提到遇到 User juxxxxxxxxxx already has more than ‘max_user_connections’ active connections…… 这样的错误,最终通过在循环中使用 Thread.Sleep,降低 CRUD 操作的频率,让连接数下降至不到原来的一半,从而解决了这个棘手的问题,有兴趣的朋友可以点击链接回顾一下。今天又看了一下添加 Thread.Sleep 后,程序运行时的 IOPS 和 连接数:运行结果:连接

2020-12-13 15:26:03 219

原创 连接数从异常到 300 到 5(记 RDS MySQL 的一个大坑)

花了一个下午的时间,终于把一个 RDS MySQL 的一个大坑填上了,解决方法令人匪夷所思!绝对会让各位看官感到大吃一惊,RDS MySQL 居然有这样 xx 的大坑!问题最近应业务的需求,加了一个定时统计的任务,其中的算法很简单,只是需要大量的 CRUD 操作。由于业务简单,且时效性要求不高,所以代码写起来若行云流水,一气呵成,本地测试一遍通过。没料想,当部署到线上测试的时候,却上演了现场翻车,真是让人大跌眼镜……看了一下错误日志,大致如下所示:ERROR [DAL.EvaluateDetai

2020-12-13 15:18:20 244

翻译 Docker 与 Podman 容器管理的比较

翻译自 Paul Ferrill 2020年9月1日的文章《Compare Docker vs. Podman for container management》 1Docker 和 Podman 在管理容器方面提供了类似的功能,但是 Docker 的安全漏洞可能使 Podman 对于某些管理员来说更具吸引力。目前 Docker 已经成为许多 IT 管理员们事实上的标准,并且在开发人员中占有很大的份额。 但是,Podman 由于具有以非特权用户身份运行且无需守护进程的能力,因此与基本的 Docke.

2020-12-04 18:20:02 1568 1

翻译 Docker Vs Podman

翻译自 Chetansingh 2020年4月24日的博文《Docker Vs Podman》 1容器化的一场全新革命是从 Docker 开始的,Docker 的守护进程管理着所有的事情,并成为最受欢迎和广泛使用的容器管理系统之一。但是,请稍等!您真的会假设 Docker 是唯一有效的容器化方式而认为值得坚持去使用它吗?这篇博文将帮助您了解以下问题:为什么我们不使用 Docker? 为什么我们要使用 Docker? 没有别的选择了吗?其实,当您决定要开始使用一套新的工具进行容器管理时,Doc.

2020-12-01 11:59:22 531

原创 C# 中的本地函数

今天我们来聊一聊 C# 中的本地函数。本地函数是从 C# 7.0 开始引入,并在 C# 8.0 和 C# 9.0 中加以完善的。引入本地函数的原因我们来看一下微软 C# 语言首席设计师 Mads Torgersen 的一段话:Mads Torgersen:我们认为这个场景是有用的 —— 您需要一个辅助函数。 您仅能在单个函数中使用它,并且它可能使用包含在该函数作用域内的变量和类型参数。 另一方面,与 lambda 不同,您不需要将其作为第一类对象,因此您不必关心为它提供一个委托类型并分配一个实际的

2020-11-24 17:55:06 772

原创 C# 中的数字分隔符 _

编写 C# 代码时,我们时常会用到很大的数字,例如下面定义的变量:const long loops = 50000000000;您能快速读出这是多少吗?是不是还是会有很多人把光标定位到最后一位,然后按键盘上的向左键一个一个往上数:个、十、百、千、万、十万、百万、千万、亿、十亿、百亿、千亿……数字的这种写法,严重影响了它的可读性。所以人们才会发明了诸如千分位之类的写法,上面的数字用千分位可以写作 50,000,000,000,这样子是不是可读性就强多了?不过这是西方人的写法。如果按照我们中国人的习

2020-11-17 19:24:35 632

原创 C# 8: 可变结构体中的只读实例成员

在之前的文章中我们介绍了 C# 中的 只读结构体(readonly struct)1 和与其紧密相关的 in 参数2。今天我们来讨论一下从 C# 8 开始引入的一个特性:可变结构体中的只读实例成员(当结构体可变时,将不会改变结构体状态的实例成员声明为 readonly)。引入只读实例成员的原因简单来说,还是为了提升性能。我们已经知道了只读结构体(readonly struct)和 in 参数可以通过减少创建副本,来提高代码运行的性能。当我们创建只读结构体类型时,编译器强制所有成员都是只读的(即没有实

2020-11-13 16:04:34 154

原创 C# 中的 in 参数和性能分析

in 修饰符也是从 C# 7.2 开始引入的,它与我们上一篇中讨论的 《C# 中的只读结构体(readonly struct)》1 是紧密相关的。in 修饰符in 修饰符通过引用传递参数。 它让形参成为实参的别名,即对形参执行的任何操作都是对实参执行的。 它类似于 ref 或 out 关键字,不同之处在于 in 参数无法通过调用的方法进行修改。ref 修饰符,指定参数由引用传递,可以由调用方法读取或写入。out 修饰符,指定参数由引用传递,必须由调用方法写入。in 修饰符,指定参数由引用传递,可

2020-11-05 18:10:11 180

翻译 C# 中的只读结构体(readonly struct)

翻译自 John Demetriou 2018年4月8日 的文章 《C# 7.2 – Let’s Talk About Readonly Structs》1在本文中,我们来聊一聊从 C# 7.2 开始出现的一个特性 readonly struct。任一结构体都可以有公共属性、私有属性访问器等等。我们从以下结构体示例来开始讨论:public struct Person{ public string Name { get; set; } public string Surname .

2020-10-29 19:44:58 722

翻译 C# 8: 默认接口方法

翻译自 John Demetriou 2018年8月4日 的文章 《C# 8: Default Interface Methods》1,补充了一些内容C# 8 之前今天我们来聊一聊默认接口方法。听起来真的很奇怪,不是吗?接口仅用于定义契约。接口的实现类会拥有一组公共方法,不过实现类被赋予了以其自己的方式实现每个方法的自由。目前为止,如果我们还需要为这些方法中的一个或多个方法提供实现,我们将使用继承。如果我们希望这个类不是实现所有方法,而只是实现其中的一个子集,我们可以将这些方法和类本身抽象(abs.

2020-10-22 17:03:34 318

翻译 多重继承和菱形问题

多重继承的一个大问题就是菱形问题,由于菱形问题,Java 和 C# 都不允许多重继承。开篇之前,我假设每个人都知道在面向对象编程中继承是什么,以及它能提供什么好处。

2020-10-21 19:46:53 161

翻译 C# 中 System.Range 结构体

翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体1,与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前,没有访问集合中任意部分的范围或切片的语法。开发人员通常不得不执行一些自定义的切片操作,或者依靠诸如 array.Skip(5).Take(2); 的 LINQ 方法。现在 C# 添加了一个新的小特性,它可以帮助人们从一个大.

2020-10-15 19:36:45 522

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除