public static void Main()
new CreateScheduledEventRequestHandler().Handle(new CreateScheduledEventRequest());
public interface IScheduleInfoVisitor
void Visit( IScheduleInfoHost host );
public interface IScheduleInfoHost
void Host( RepeatingTask visitor );
void Host( OneShotTask visitor );
public class CreateScheduledEventRequestHandler : IScheduleInfoHost
public void Handle(CreateScheduledEventRequest request) => request.ScheduleInfo.Visit(this);
public void Host( RepeatingTask visitor )
Console.WriteLine("Repeat every {0}", visitor.RepeatEvery);
public void Host( OneShotTask visitor )
Console.WriteLine("Run at {0}", visitor.RunAt);
public record CreateScheduledEventRequest
public ScheduleInfo ScheduleInfo = new OneShotTask();
public abstract record ScheduleInfo : IScheduleInfoVisitor
public abstract void Visit( IScheduleInfoHost host );
public record RepeatingTask : ScheduleInfo
public TimeSpan RepeatEvery;
public override void Visit( IScheduleInfoHost host ) => host.Host(this);
public record OneShotTask : ScheduleInfo
public DateTimeOffset RunAt;
public override void Visit( IScheduleInfoHost host ) => host.Host(this);