当调用程序集处于调试配置中时,我试图在程序集中创建一个行为不同的方法。
具体来说,我有一个 Mailer 库,它使用模板来创建和发送电子邮件。因为我不想不小心用调试邮件向客户端发送垃圾邮件,所以我正在尝试制作我的SendMail
方法的 2 个版本。
这个想法是在调试模式下MailMessage.Recipients
将被清除并使用默认邮件地址(即我们自己的内部邮件地址)。我希望它尽可能透明,而不需要在调用端进行额外的代码或配置。
问题是 Mailer 库被内置到 Nuget 包中,因此始终处于发布版本中。我想做这样的事情:
[System.Diagnostics.Conditional("DEBUG")]
private void SetDebugMode(MailMessage mail)
{
mail.To.Clear();
mail.CC.Clear();
mail.Bcc.Clear();
mail.To.Add("support@example.com");
mail.Subject += " [DEBUG]";
}
public void SendMail()
{
SmtpClient smtp = new SmtpClient();
using (MailMessage mail = new MailMessage())
{
[...]
SetDebugMode(mail);
smtp.Send(mail);
}
}
这不起作用,因为调用方法是 SendMail 方法,它在 Release 配置中。
有没有办法使用相同的方法调用,使公共接口保持不变但仍然获得此功能?我想替代方案将使用可选isDebug = false
参数或配置设置或类似的东西,但我更愿意这样做,而不必编辑此程序集之外的任何其他代码。
提前致谢。