IGeekFan.FreeKit
最小基础包,提供审计实体、依赖注入标记和领域事件。
功能概览
| 功能 | 说明 |
|---|---|
| 审计实体 | 统一主键、软删除、租户、审计字段 |
| 领域事件 | 实体事件发布与订阅 |
| 依赖注入标记 | ISingletonDependency / IScopedDependency / ITransientDependency |
安装
dotnet add package IGeekFan.FreeKit
审计实体
场景:多租户文章
using IGeekFan.FreeKit.Extras.AuditEntity;
public class Article : FullAuditEntity<Guid, Guid>, ITenant
{
public Guid? TenantId { get; set; }
public string Title { get; set; } = default!;
}
继承后自动获得:
| 字段 | 说明 |
|---|---|
Id | Guid 主键 |
CreateUserId / CreateTime | 创建人/时间 |
UpdateUserId / UpdateUserName / UpdateTime | 修改人/时间 |
DeleteUserId / DeleteUserName / DeleteTime | 删除人/时间 |
IsDeleted | 软删除标记 |
TenantId | 租户 ID |
选择基类
| 基类 | 适用场景 |
|---|---|
Entity<Guid> | 只需要主键 |
Entity<Guid>, ISoftDelete | 需要软删除 |
FullAuditEntity<Guid, Guid> | 完整审计 |
依赖注入标记
配合 Autofac 自动注册服务:
// 每次请求新实例
public class ArticleService : IScopedDependency
{
}
// 单例
public class CacheService : ISingletonDependency
{
}
// 瞬时
public class EmailSender : ITransientDependency
{
}
领域事件
场景:文章发布后发通知
using IGeekFan.FreeKit.Extras.Domain;
// 定义事件
public sealed record ArticlePublishedEvent(Guid ArticleId) : IDomainEvent;
// 领域对象触发
public sealed class Article : DomainEventBase
{
public Guid Id { get; set; }
public void Publish()
{
AddDomainEvent(new ArticlePublishedEvent(Id));
}
public override object[] GetKeys() => [Id];
}
// 事件处理器
public class ArticlePublishedHandler : INotificationHandler<ArticlePublishedEvent>
{
public Task Handle(ArticlePublishedEvent e, CancellationToken ct)
{
// 发送通知、更新统计等
return Task.CompletedTask;
}
}
故障排查
| 问题 | 解决方案 |
|---|---|
| 依赖注入未生效 | 检查是否配置了 Autofac |
| 领域事件未触发 | 实体需继承 DomainEventBase |
| 审计字段缺失 | 实体需继承 FullAuditEntity |