设想
大约 20 个 ASP.net(VB) 应用程序共享相同的代码框架,并且在部署时也共享一个通用的 web.config。在各种应用程序中,我们使用 System.Net.Mail.SmtpClient/MailMessage 来发送电子邮件,现在我们希望为我们的用户实现电子邮件退出功能,同时对现有代码进行最少的更改。这遗漏了最简单的方法;从 SmtpClient 继承一个类,比如 OurSmtpClient,并覆盖 Send() 方法以删除所有选择不接收电子邮件的用户,因为这意味着我们必须将所有 New SmtpClient() 更改为 New OurSmtpClient()应用程序。
备择方案
我们之前使用 tagMapping 将标签重新映射到我们内部的派生替代品,类是否有类似的东西,以便所有 SmtpClient 自动成为 OurSmtpClient 并因此将使用覆盖的 Send() 方法?
我们也看过Extensions,但这里的问题是我们不能覆盖现有方法,只能添加新方法?
我们考虑的下一个替代方案是反射,但我们无法考虑如何实际实现它。
事件..哦,如果有发送事件...
代码(因为每个人都喜欢它)
这是继承方法,只是为了理解我们在寻找什么:
Public Class OurSmtpClient
Inherits SmtpClient
Public Overloads Sub Send(message As MailMessage)
For i As Integer = message.To.Count - 1 To 0 Step -1
With message.To(i)
If (.Address.Contains("test")) Then
message.To.RemoveAt(i)
End If
End With
Next
MyBase.Send(message)
End Sub
End Class
有什么建议么?如何在不更改现有应用程序中的代码且仅在共享代码(位于应用程序中的 App_Code 中)或共享 web.config 中的情况下做到这一点?