我试图在一个程序集中创建一个方法,当调用程序集处于Debug配置时,该方法的行为会有所不同。
具体来说,我有一个Mailer库,它使用模板来创建和发送电子邮件。由于我不想用调试邮件意外地垃圾邮件客户端,我正在尝试制作我的SendMail
方法的两个版本。
这个想法是在调试模式下MailMessage.Recipients
将被清除,并且将使用默认的邮件地址(即我们自己的内部邮件地址)。我希望这一点尽可能透明,而不需要在主叫方面提供额外的代码或配置。
问题是Mailer库内置于Nuget包中,因此始终处于Release版本中。 我想做这样的事情:
[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
参数或配置设置或类似的东西,但我更愿意这样做,而无需编辑此程序集之外的任何其他代码。
提前致谢。
答案 0 :(得分:0)
你能不能这样做:
#if DEBUG
Mail.Subject += " [Debug]";
#endif
等?因此,如果调试
,则有1个附加代码的函数或
if(System.Diagnostics.Debugger.IsAttached)Mail.Subject + =“[DEBUG]”;
答案 1 :(得分:0)
这样的事情怎么样......
#if DEBUG
private void SetDebugMode(MailMessage mail) {
mail.To.Clear();
mail.CC.Clear();
mail.Bcc.Clear();
mail.To.Add("support@example.com");
mail.Subject += " [DEBUG]"; }
#endif
public void SendMail() {
SmtpClient smtp = new SmtpClient();
using (MailMessage mail = new MailMessage()) {
[...]
#if DEBUG
SetDebugMode(mail);
#endif
smtp.Send(mail); } }
这样SetDebugMode方法和对它的调用只能在调试模式下编译和使用。