У меня есть приложение, которое будет запускаться раз в минуту. После завершения приложение запишет в таблицу журнала до своего выхода. Этот объект тесно отображает эту таблицу журнала:
class SendResult
{
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public TimeSpan ExecutionTime { get
{
return EndTime - StartTime;
}
public bool RequestChecked{ get; set; }
public int RequestID { get; set; }
public bool RequestRequiresFileSend { get; set; }
public bool FilesRead { get; set; }
public bool FilesSent { get; set; }
public SendResult() { }
}
Каждое свойство будет обновляться в другой точке приложения. Я добился этого, объявив объект один раз и сделав его статичным:
class Program
{
public static SendResult Result;
public Program()
{
Result = new SendResult();
Result.StartTime = DateTime.Now;
// do stuff...
Result.EndTime = DateTime.Now;
LogUtility.Log(Result);
}
}
.. и везде в приложении я просто звоню:
Program.Result.FilesRead = ...
Я знаю, что альтернативой является создание приложения вокруг SendResult, например:
SendResult result = new SendResult();
result.StartTime = DateTime.Now;
var request = new RequestHandler().CheckRequest();
result.RequestChecked = request.Checked;
result.RequestID = request.RequestID;
result.RequestRequiresFileSend = request.FileSendRequired;
var sendResult = new FileSender(request.ResuestID).Send();
result.FilesRead = sendResult.FilesRead;
// ...and so on
Но в случае, когда вам нужно вставить этот результат, отслеживающий после весь ваш код был написан, есть ли лучший способ, чем глобальный метод var, который я использовал?