У меня есть несколько серверных процессов, которые запускаются один раз в день.Я хотел бы получить уведомление, если любой из них не удастся по электронной почте.Я не хочу переписывать код, который перехватывает исключение и отправляет сообщение электронной почты, поскольку каждый раз это почти один и тот же код.
Я уже реализовал первоначальное решение для этого.Я создал класс, который содержит адрес электронной почты человека, которого нужно уведомить, а также имя процесса.Я использую делегат, чтобы позволить пользователю передать ссылку на функцию void без параметров.
Я думаю, что это сработает, но это лучший способ сделать это?Это даже то, что я должен делать, или есть лучший способ обработки ошибок?Я думал об использовании атрибутов класса C #, но я не уверен, как на самом деле использовать метаданные атрибута для достижения этой цели.
public class ErrorNotifier
{
string _processName;
string _administratorEmail;
RunProcess _runProcess;
public ErrorNotifier(string processName, string administratorEmail, RunProcess runProcess)
{
_processName= exportName;
_administratorEmail = administratorEmail;
_runProcess = runProcess;
}
public void Run()
{
try
{
_runProcess();
}
catch (Exception ex)
{
SendErrorMessage(ex);
}
}
protected void SendErrorMessage(Exception ex)
{
SmtpClient client = new SmtpClient(serverName);
MailMessage msg;
string errorEmail = _administratorEmail;
msg = new MailMessage(FormatStringStripNonAlphaNumeric(_processName) + "@business.com", errorEmail, "Error encountered during " + _processName+ " process", ex.ToString());
client.Send(msg);
}
public delegate void RunProcess();
}
Затем я вызываю его примерно так:
new ErrorNotifier(exportName,administratorEmail, ProcessToRun).Run();