惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
MyScale Blog
MyScale Blog
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
GbyAI
GbyAI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
V
V2EX
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
博客园 - 三生石上(FineUI控件)
Stack Overflow Blog
Stack Overflow Blog
U
Unit 42
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
H
Help Net Security
D
DataBreaches.Net
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
T
The Blog of Author Tim Ferriss
C
Check Point Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 宁静致远.

Swagger 页面登录验证中间件(Basic认证) Hangfire 的 ASP.NET Core 应用程序始终运行在IIS上 DevExpress 无法打开WinForm设计窗体,报错: 类型 universe 无法解析程序集: System, Version=2.0.0.0 PowerDesigner参数设置 Hangfire 任务调度配置 解决 Hangfire 中使用HttpClient 任务超时问题 TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. ASP.NET Core API 自定义全局异常 Dapper模糊查询Like 删除重复记录,仅留一条 Task 多线程执行 使用Hangfire+.NET 6实现定时任务管理(推荐) 使用 IHttpClientFactory 处理请求和响应 Json 序列化,将对象序列化为Json字符串(此Json序列化,是“不安全的放松JSON转义”,即不会将物特殊符号和中文进行转码) 查询指定数据库中有全部表名,快速定位列名所在表 Sql 查询工具 Sql 数据库表查询 Json 列 显示实体之间的外键关系 调整PowerDesigner各种字体大小 工厂里常说的QC, IQC,IPQC,QA都是干什么的? appsettings.json launchSettings.json 发布 配置
雪花漂移ID,Yitter.IdGenerator 封装成一个适用于 ASP.NET C...
宁静致远. · 2025-12-03 · via 博客园 - 宁静致远.

封装目标

  • Program.cs 中注册服务

  • 提供一个 IIdGenerator 接口

  • 实现类使用 Yitter.IdGenerator 生成唯一 ID

  • 支持依赖注入,方便在 Controller、Service 中调用

安装程序包:

dotnet add package Yitter.IdGenerator

定义接口:

public interface IIdGenerator
{
    long NewId();
}

实现接口:

using Yitter.IdGenerator;

public class YitterIdGenerator : IIdGenerator
{
    public YitterIdGenerator()
    {
        var options = new IdGeneratorOptions(workerId: 1); // WorkerId 可根据部署环境动态设置
        YitIdHelper.SetIdGenerator(options);
    }

    public long NewId()
    {
        return YitIdHelper.NextId();
    }
}

Program.cs 中注册服务

builder.Services.AddSingleton<IIdGenerator, YitterIdGenerator>();

在 Controller 或 Service 中使用

public class OrderService
{
    private readonly IIdGenerator _idGenerator;

    public OrderService(IIdGenerator idGenerator)
    {
        _idGenerator = idGenerator;
    }

    public void CreateOrder()
    {
        long orderId = _idGenerator.NewId();
        Console.WriteLine($"新订单 ID: {orderId}");
    }
}

可选扩展:WorkerId 自动分配

如果你部署在 Kubernetes 或容器环境,可以考虑通过环境变量或 Redis 分布式锁自动分配 WorkerId,避免冲突。

引用:

https://github.com/yitter/IdGenerator/blob/master/C%23/source/Yitter.IdGenerator/YitIdHelper.cs

https://github.com/yitter/idgenerator