public abstract class EmailType : Enumeration<EmailType, int> { public static readonly EmailType AnythingElse = new AnythingElseType(); public static readonly EmailType SpecialEmail = new SpecialEmailType(); protected EmailType(int value, string displayName) : base(value, displayName) { } protected static string SendGridSmtp { get { return "smtp.sendgrid.net"; } } protected static int SendGridPort { get { return 587; } } public abstract SmtpSettings GetSmtpSettings(); private class AnythingElseType : EmailType { public AnythingElseType() : base(0, "AnythingElse") { } public override SmtpSettings GetSmtpSettings() { return new SmtpSettings { Port = SendGridPort, Server = SendGridSmtp, UseSsl = true, Username = "some@user.com", Password = "somePassword" }; } } private class SpecialEmailType : EmailType { public SpecialEmailType() : base(1, "SpecialEmail") { } public override SmtpSettings GetSmtpSettings() { return new SmtpSettings { Port = SendGridPort, Server = SendGridSmtp, UseSsl = true, Username = "another@user.com", Password = "anotherPassword" }; } } }