Skip to content

sm new project/module: generated event records implement IEvent directly and don't compile (should derive from DomainEvent) #218

Description

@antosubash

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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcli

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions