我正在实现域驱动设计(DDD)体系 struct ,并希望为我的实体利用强类型ID.我的基数为AggregateRoot
的班级如下所示:
public abstract class AggregateRoot<TId>
: Entity<TId>
where TId : struct
{
private readonly List<IDomainEvent> _domainEvents = [];
// ...
}
下面是一个实体示例:
public readonly record struct AuctionId(Guid Value);
public class Auction
: AggregateRoot<AuctionId>
{
// ...
}
我有一个域事件分派器拦截器(PublishDomainEventsInterceptor
),我希望将其与所有聚合一起使用:
internal sealed class PublishDomainEventsInterceptor
: SaveChangesInterceptor
{
// ...
public async Task PublishDomainEvents(
DbContext? context)
{
// ...
// Problem: Need a generic way to handle strongly-typed IDs here
var entities = context.ChangeTracker
.Entries<AggregateRoot>() // Issue: Requires type argument
.Where(e => e.Entity.DomainEvents.Any())
.Select(e => e.Entity);
// ...
}
}
如果事先不知props 体的TId
类型,我如何修改我的PublishDomainEvents()
方法或相关方法以使其与AggregateRoot<TId>
一起工作?我想维护类型安全和强类型ID的好处.
提前感谢您的帮助,干杯!:)