推荐一款Ioc容器之Ninject入门详解
随着软件的不断发展,功能越来越复杂,为了将复杂的逻辑简单化,解耦成了架构师,工程师们经常提起的话题,今天我们就以一个简单的小例子,来看一下解耦的好处,顺便介绍一款Ioc容器Ninject的应用,仅供学习分享使用,如有不足之处,还请指正。
假设场景
在武侠小说中,江湖代表着神秘莫测,身不由己,更有传奇色彩浓郁的 ...
笔记:WPF MVVM 模式下通过消息机制获取自定义对话框数据
本篇笔记主要记录如何在 MVVM 模式下,通过消息机制获取自定义对话框的数据。
这是在实现一个增删查改的小页面时出现的需求,将原本添加的功能单独放在对话框中,进而精简主界面。
运行环境:
.NET 10
CommunityToolkit.Mvvm 8.4.0
实现步骤
先定义一个带回复功能的消息类,用作媒介,传递不同的 View 和 ViewModel 之间 ...
C# 委托、事件、Lambda、LINQ
一、委托(Delegate):C# 的「函数指针」,方法的容器
1. 核心定义
委托是存储方法引用的类型,可以把方法当作参数传递、赋值、调用,实现解耦 + 回调。
2. 基础语法
// 1. 定义委托(匹配方法的返回值+参数)
public delegate int CalcDelegate(int a, int b);
// 2. 定义匹配委托的方法 ...
多租户系统框架的基础模块设计和分析设计
前面介绍了几篇关于多租户下的设计思路,要把多租户下的系统设计落实到实处,在实际开发中进行完善,才能在具体项目上精益求精,否则系统设计终究为空中楼阁,很难在细节上完善到位。
本篇随笔在进行多租户的系统设计完成并落实到开发后,针对某些场景进行了一些分析介绍,例如对于多租户/账套下的菜单和功能点的设计。
1、 ...
C# async/await、Task 、死锁
一、核心
Task:代表一个尚未完成的操作(可以是异步、也可以是同步)
async/await:语法糖,让异步代码写得像同步
本质:await 时挂起方法,释放线程;操作完成后恢复执行
二、Task 到底是什么?
1. Task 不是线程
很多人误区:
“启动一个 Task 就开一个线程。”
...
推荐一种程序崩溃闪退或卡死的分析方法
在实际开发中,经常遇到程序崩溃闪退或者卡死的问题,在遇到这种问题的时候,往往很难捕捉异常,且日志也无法正确记录到问题发生的位置。在Windows操作系统中,dump文件就可以记录并保存程序崩溃时的快照,今天我们通过一个小例子,简述一种生成dump文件的方法,仅供学习分享使用,如有不足之处,还请指正。
闪退场 ...
如何使用PocoEmit.Mapper替代AutoMapper
PocoEmit使用比较简单对于大部分转化是不需要手动配置
可以替代AutoMapper的大部分工作,实现精简代码,提高性能
一、获取Mapper实例
1. 获取Mapper默认实例
Default是一个静态延迟初始化的默认实例
IMapper mapper = PocoEmit.Mapper.Default;
2. 构造Mapper新实例
除了测试,不建议每次转化调用Create
Create的实例建 ...
Entity Framework Core中对实体类的字段迁移到数据库表
环境:NET Core 7.0 | Entity Framework Core 7.0.10 | Sql Server 数据库
1、创建解决方案 migration
2、创建类库 test.Domain
引用包:
Microsoft.EntityFrameworkCore.Abstractions
创建类 AppUser.cs
using Microsoft.EntityFrameworkCore ...
对 .NET FileSystemWatcher引发内存碎片化的 反思
一:背景
1. 讲故事
前些天又遇到了一例 FileSystemWatcher 引发的内存碎片化故障,但这个碎片化不是因为经典的 reloadOnChange=true 导致的,所以我觉得有必要做一次深度的反思,供以后遇到类似问题提供技术上的解决方法,这篇我们就来系统的讲解下 两种碎片化方式的调查方法。
二:经典的 FileSystemWatcher 碎片化
1. 测 ...
Excel处理控件Aspose.Cells教程:使用C#在Excel中创建气泡图
多维数据可视化对于深入分析至关重要。气泡图允许您在单个图表中显示三个数据系列——X 轴、Y 轴和气泡大小。在本指南中,您将学习如何使用 C# 和 Aspose.Cells for .NET 在 Excel 中创建气泡图。无论您需要展示销售业绩、市场份额还是科学数据,以下示例都将帮助您仅用几行代码即可生成专业且可直接导出的图表 ...
LINQ
为什么要学习linq :使处理数据变得简单
需求:
统计一个字符串中每个字母出现的频率(忽略大小写),然后按照从高到低的顺序输出出现频率高于两次的单词和其出现的频率
var items = s.Where(c => char.IsLetter(c))//过滤非字母
.Select(c => char.ToLower(c))//大写字母转小写
.GroupBy(c => c)//根据字母分组
...
net接口请求参数可能会被拦截--巨坑
中间件引起的接口请求参数被拦截,导致参数一直是null,这问题困扰了我很久,值得记录
1.场景
1.1 客户端使用framework4.8做一个接口请求发送:
public static class ApiHelper
{
private static string Internal_ApiUrl = string.Empty;
private static string Client_ApiUrl = string.Empty;
static ApiHelper()
{
...
离线服务器手动安装vscode-server遇到的坑
首先,目前新版本vscode不再使用bin文件夹,而是使用cli文件夹和code文件,具体可以查看:vscode 远程 linux(包括离线vscode-server安装,免密登录方法)_vscode-server-linux-CSDN博客其中的新版方法,然而需要注意的是:
下一步如果正常使用,那么无需调整。
下一步如果显示failed to parse remote port from the server o ...
国产化文档开发组件Spire.Office 10.10 全新发布!多项文档处理能力重磅升级
近日,知名国产化文档开发组件Spire.Office 同步更新 .NET和 Java 版本至10.10.0 !本次更新带来了多项全新功能与性能优化,为开发者提供更强大、更高效的文档、表格、PDF、演示文稿处理能力。
Spire.Office 官方试用版下载,请联系慧都科技
欢迎加入Spire技术交流Q群(125237868),与更多小伙伴一起提升开发技能!
...
C# PDF转图片工具类 - 基于Docnet和SkiaSharp的实现
目录简介核心代码使用示例依赖包总结讨论
简介
在 .NET 开发中,PDF 转图片是一个常见需求。本文介绍如何使用 Docnet.Core 和 SkiaSharp 实现一个跨平台的 PDF 转图片工具类。
核心代码
using Docnet.Core;
using Docnet.Core.Models;
using SkiaSharp;
namespace PdfTools
{
/// <summary>
/// PDF 页面转图片工 ...
.NET 规范异常捕获 & 处理
一、核心规则
异常仅用于非预期错误,禁止用来做业务逻辑判断(替代 if/TryXXX)。
精准捕获:抓具体异常,禁止无脑捕获 Exception。
禁止空捕获 catch{}、吞异常、隐藏故障。
重抛异常只用裸 throw;,禁用 throw ex;(丢失堆栈)。
资源释放优先 using,少手写 finally。
优先使用 when 异常过滤器,缩小捕获范围 ...
【.NET并发编程 - 05】SynchronizationContext 与死锁问题
05. SynchronizationContext 与死锁问题:揭开 ConfigureAwait 的神秘面纱
本章 GitHub 仓库:csharp-concurrency-cookbook ⭐
欢迎 Star 和 Fork!所有代码示例都可以在仓库中找到并运行。
🎯 本章导读
📌 本文目标:彻底搞懂 SynchronizationContext 的工作原理,理解异步死锁的根本原因,掌握 ConfigureAwait 的正确 ...
.NET Polly 重试、熔断、降级
一、安装依赖
# 基础包
Install-Package Polly
# HTTP 集成(推荐) Install-Package Microsoft.Extensions.Http.Polly
二、策略与代码
1. 重试(Retry):自愈瞬时故障
作用:网络抖动、偶发超时、5xx 等临时错误自动重试,避免单次失败影响业务。
常用模式:固 ...
[C# 笔记] 如何设置消息钩子 (以低级鼠标钩子为例)
简单入门
1. 准备函数[1][2][3]
[DllImport("User32")]
// 设置消息钩子
public static extern IntPtr SetWindowsHookExA(int idHook, HookProc lpfn, IntPtr hmod, int dwThreadId);
[DllImport("User32")]
// 移除消息钩子
public static extern bool UnhookWindowsHookEx(IntPtr idHook);
[DllImport("User32")]
// 继 ...
.NET 双缓存策略:本地缓存、分布式缓存
一、设计思路
1. 架构分层
一级缓存:IMemoryCache(进程内内存缓存,读写纳秒级,无网络开销)
二级缓存:IDistributedCache(Redis 分布式缓存,跨服务共享,毫秒级)
数据源:数据库 / 接口(兜底,避免缓存穿透)
2. 读写流程
读取数据(Get)
先查本地缓存,命中直接返回
本地 ...