Summary
A freshly scaffolded project does not compile: the generated domain-event record implements IEvent directly, but IEvent now requires EventId and OccurredAt.
Repro
dotnet tool install -g SimpleModule.Cli # 0.0.37
sm new project InvoiceManager
cd InvoiceManager
dotnet build
Actual
Items.Contracts/Events/ItemCreatedEvent.cs(5,53): error CS0535:
'ItemCreatedEvent' does not implement interface member 'IEvent.EventId'
Items.Contracts/Events/ItemCreatedEvent.cs(5,53): error CS0535:
'ItemCreatedEvent' does not implement interface member 'IEvent.OccurredAt'
Build FAILED.
The generated file:
usingSimpleModule.Core.Events;namespaceSimpleModule.Items.Contracts.Events;publicsealedrecordItemCreatedEvent(intItemId):IEvent;
Root cause
feat(events): durable inbox/outbox via Wolverine EF Core (#192) added members to IEvent:
publicinterfaceIEvent{GuidEventId{get;}DateTimeOffsetOccurredAt{get;}}publicabstractrecordDomainEvent:IEvent{publicGuidEventId{get;init;}=Guid.CreateVersion7();publicDateTimeOffsetOccurredAt{get;init;}=DateTimeOffset.UtcNow;}IEvent's own XML doc says "Event records typically inherit DomainEvent rather than implementing this directly." — but the sm new project / sm new module templates still emit : IEvent.
Suggested fix
Update the event template(s) in the CLI to derive from DomainEvent:
publicsealedrecordItemCreatedEvent(intItemId):DomainEvent;
Environment
sm CLI 0.0.37, SimpleModule.* 0.0.37- .NET SDK 10.0.202, Linux
Workaround
Change generated *Event records from : IEvent to : DomainEvent (or delete them if unused).
Summary
A freshly scaffolded project does not compile: the generated domain-event record implements
IEventdirectly, butIEventnow requiresEventIdandOccurredAt.Repro
Actual
The generated file:
Root cause
feat(events): durable inbox/outbox via Wolverine EF Core (#192)added members toIEvent:IEvent's own XML doc says "Event records typically inheritDomainEventrather than implementing this directly." — but thesm new project/sm new moduletemplates still emit: IEvent.Suggested fix
Update the event template(s) in the CLI to derive from
DomainEvent:Environment
smCLI 0.0.37, SimpleModule.* 0.0.37Workaround
Change generated
*Eventrecords from: IEventto: DomainEvent(or delete them if unused).