Table of Contents

Event-Carried State Transfer Generator

[GenerateEventCarriedStateTransfer] creates a typed EventCarriedStateTransfer<TEvent, TKey, TState> factory from key, version, and state mapper methods.

[GenerateEventCarriedStateTransfer(typeof(InventoryAdjustedEvent), typeof(string), typeof(InventoryReadModel), TransferName = "inventory-state")]
public static partial class InventoryStateTransfer
{
    [EventCarriedStateKey]
    private static string Key(InventoryAdjustedEvent evt) => evt.Sku;

    [EventCarriedStateVersion]
    private static long Version(InventoryAdjustedEvent evt) => evt.Version;

    [EventCarriedStateMapper]
    private static InventoryReadModel Map(InventoryAdjustedEvent evt) => new(evt.Sku, evt.QuantityOnHand, evt.Warehouse);
}

The generated factory is parameterless and can be registered directly with IServiceCollection.

Diagnostics:

  • PKECST001: host type must be partial.
  • PKECST002: exactly one key selector, version selector, and state mapper are required.
  • PKECST003: selector or mapper signature is invalid.