NoelleNet.AspNetCore 10.0.1

dotnet add package NoelleNet.AspNetCore --version 10.0.1
                    
NuGet\Install-Package NoelleNet.AspNetCore -Version 10.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="NoelleNet.AspNetCore" Version="10.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="NoelleNet.AspNetCore" Version="10.0.1" />
                    
Directory.Packages.props
<PackageReference Include="NoelleNet.AspNetCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add NoelleNet.AspNetCore --version 10.0.1
                    
#r "nuget: NoelleNet.AspNetCore, 10.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package NoelleNet.AspNetCore@10.0.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=NoelleNet.AspNetCore&version=10.0.1
                    
Install as a Cake Addin
#tool nuget:?package=NoelleNet.AspNetCore&version=10.0.1
                    
Install as a Cake Tool

Noelle.Net

这是辅助 .NET 开发的小类库~ 平时顺手攒的小零件都在这儿了,希望能帮你少敲几行重复代码!(。•̀ᴗ-)✧


安装

包名前缀统一为 NoelleNet.*,按需选择:

# 核心(异常、安全、序列化、缓存、工具类)
dotnet add package NoelleNet.Core

# DDD 领域模型 + 审计接口
dotnet add package NoelleNet.Ddd.Domain

# EF Core 仓储、工作单元、拦截器
dotnet add package NoelleNet.EntityFrameworkCore

# 事件总线:本地(MediatR)+ 分布式(CAP)
dotnet add package NoelleNet.EventBus.Local.MediatR
dotnet add package NoelleNet.EventBus.Distributed.CAP

# 消息与数据库原子提交时,再引入对应数据库的 CAP 事务管理器
dotnet add package NoelleNet.Extensions.CAP.SqlServer   # 或 .MySql / .PostgreSql

# ASP.NET Core 增强(异常处理、模型验证、路由)+ MediatR 管道
dotnet add package NoelleNet.AspNetCore
dotnet add package NoelleNet.Extensions.MediatR

包说明

包名 描述
NoelleNet.Core 基础库:异常、安全、序列化、缓存、工具类
NoelleNet.Auditing 审计接口:ICreationAuditedIModificationAuditedIAudited
NoelleNet.Uow 工作单元与事务管理器接口:IUnitOfWorkITransactionManager
NoelleNet.Ddd.Domain DDD 领域模型:EntityAggregateRootValueObject、领域事件、审计实体基类、IRepository
NoelleNet.EventBus 事件总线抽象:ILocalEventBusIDistributedEventBusEventNameAttribute
NoelleNet.EventBus.Local.MediatR 基于 MediatR 的本地事件总线
NoelleNet.EventBus.Distributed.CAP 基于 DotNetCore.CAP 的分布式事件总线
NoelleNet.EntityFrameworkCore EF Core 集成:EfCoreRepositoryUnitOfWork、审计 / 领域事件 / 自动 GUID 键拦截器
NoelleNet.AspNetCore 全局异常处理(ProblemDetails)、模型验证(DataAnnotations + FluentValidation)、路由 kebab-case
NoelleNet.Application.Contracts 应用层 DTO:分页 / 排序 / 列表结果、审计 DTO 基类
NoelleNet.Extensions.MediatR MediatR 管道行为:日志记录、事务自动管理
NoelleNet.Extensions.CAP.SqlServer CAP + SQL Server 事务管理器(另有 .MySql / .PostgreSql

快速入门

1. 定义领域模型

public class TodoItem : AuditedAggregateRoot<Guid>
{
    private TodoItem() { }   // EF Core 专用

    public TodoItem(string title)
    {
        Id = Guid.CreateVersion7();
        Title = title;
        AddDomainEvent(new EntityCreatedEvent<TodoItem>(this));
    }

    public string Title { get; private set; } = string.Empty;
    public bool IsCompleted { get; private set; }

    public void Complete()
    {
        IsCompleted = true;
        AddDomainEvent(new EntityUpdatedEvent<TodoItem>(this));
    }
}

2. 注册服务

没有自动注册,以下为各模块的注册入口(AddDbContext<DbContext, AppDbContext> 会同时注册抽象与具体两个服务类型):

// 安全主体 + GUID 生成器
services.AddHttpContextAccessor();
services.AddScoped<ICurrentUser, CurrentUser>();
services.AddScoped<ICurrentPrincipalProvider, NoelleHttpContextCurrentPrincipalProvider>();
services.AddSingleton<IGuidGenerator, NoelleGuidGenerator>();

// 全局异常处理(管道中还需调用 app.UseExceptionHandler())
services.AddLocalization();
services.AddProblemDetails();
services.AddSingleton<IErrorResponseWriter, ProblemDetailsErrorResponseWriter>();
services.AddExceptionHandler<NoelleExceptionHandler>();

// 模型验证:两个过滤器二选一,并需注册验证器
services.AddControllers(options => options.Filters.Add<NoelleFluentValidationFilter>())
    .ConfigureApiBehaviorOptions(options => options.SuppressModelStateInvalidFilter = true);
services.AddValidatorsFromAssemblyContaining<CreateTodoItemValidator>();

// 数据库 + 拦截器
services.AddDbContext<DbContext, AppDbContext>((sp, options) =>
{
    options.UseSqlServer(connectionString);
    options.AddInterceptors(
        sp.GetRequiredService<NoelleAutoSetGuidKeyInterceptor>(),
        sp.GetRequiredService<NoelleAuditInterceptor>(),
        sp.GetRequiredService<NoelleDomainEventInterceptor>());
});
services.AddScoped<NoelleAutoSetGuidKeyInterceptor>();
services.AddScoped<NoelleAuditInterceptor>();
services.AddScoped<NoelleDomainEventInterceptor>();

// 工作单元与事件总线
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddScoped<ITransactionManager, NoelleTransactionManager>();

var assemblies = new[] { typeof(Program).Assembly };
services.AddLocalEventBus(cfg =>
{
    cfg.RegisterServicesFromAssemblies(assemblies);
    cfg.UseMediatR(x => x.RegisterServicesFromAssemblies(assemblies));
});

// 仓储(显式注册)
services.AddScoped<ITodoItemRepository, TodoItemRepository>();

3. 使用

public class TodoAppService(ITodoItemRepository repository, IUnitOfWork unitOfWork)
{
    public async Task<TodoItem> CreateAsync(string title)
    {
        var item = new TodoItem(title);
        await repository.AddAsync(item);
        await unitOfWork.SaveChangesAsync();
        return item;
    }
}

功能说明

  • 异常处理BusinessException → 400,EntityNotFoundException → 404,自动转为 RFC 9457 ProblemDetails,支持错误码本地化;
  • 模型验证NoelleModelValidationFilter(DataAnnotations)与 NoelleFluentValidationFilter(FluentValidation)二选一,统一错误格式;
  • 领域事件:由 NoelleDomainEventInterceptorSaveChanges 提交前派发,处理器在事务内执行(禁止嵌套 SaveChanges,外部副作用请走分布式事件);
  • 分布式事件PublishDelayAsync 的延迟发布依赖 CAP 的持久化存储与调度器,InMemory 存储下无法保证生效。

文档与支持

  • 注册骨架与快速入门见上文;更细的用法说明收录在仓库的 docs 目录中;
  • 项目主页:github.com/xiaolong233/noelle-net
  • 目标框架 .NET 10 | 许可证 MIT
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.1 84 9/12/2026
10.0.0 91 9/12/2026
10.0.0-alpha.1 64 9/11/2026
9.2.0 99 9/9/2026
9.2.0-alpha.1 60 9/8/2026
9.1.5 127 6/24/2026
9.1.4 118 4/21/2026
9.1.3 169 3/16/2026
9.1.2 123 2/12/2026
9.1.1 128 1/31/2026
9.1.0 127 1/18/2026
9.0.1 204 10/16/2025
9.0.0 227 9/1/2025
2.7.0 278 8/5/2025
2.6.2 199 7/14/2025
2.6.1 204 7/2/2025
2.6.0 200 7/1/2025
2.5.7 153 4/5/2025
2.5.6 183 2/12/2025
2.5.5 163 1/27/2025
Loading failed