Materialized View Generator
GenerateMaterializedViewAttribute creates a typed MaterializedView<TState,TEvent> factory from annotated projection handler methods.
[GenerateMaterializedView(typeof(OrderReadModel), typeof(OrderEvent), FactoryName = "CreateView", ViewName = "order-read-model")]
public static partial class GeneratedOrderMaterializedView
{
[MaterializedViewHandler(typeof(OrderPlaced), Order = 10)]
private static OrderReadModel ApplyPlaced(OrderReadModel state, OrderPlaced @event)
=> state with { OrderId = @event.OrderId };
}
The generated factory is equivalent to:
MaterializedView<OrderReadModel, OrderEvent>
.Create("order-read-model")
.WithHandler<OrderPlaced>(ApplyPlaced, 10)
.Build();
Diagnostics:
PKMV001: host type must be partial.PKMV002: at least one[MaterializedViewHandler]method is required.PKMV003: handler methods must be static and return the state type, orValueTask<TState>with aCancellationToken.