public static void Main()
Console.WriteLine("Hello World");
public class ReportFactory<TViewModel> : IReportFactory<TViewModel> where TViewModel : class
public IReport Create(TViewModel viewModel, EmailQueueTypeCode typeCode)
case EmailQueueTypeCode.HSR:
return new HorseShowReport();
throw new ArgumentOutOfRangeException(nameof(typeCode), typeCode, null);
public interface IReportFactory<in TViewModel>
IReport Create(TViewModel viewModel, EmailQueueTypeCode typeCode);
public abstract class Report : IReport
public abstract void Generate();
public enum EmailQueueTypeCode
public class HorseShowReport : Report
public override void Generate()