У меня есть класс, имеющий около 200+ методов, каждый из этих методов выполняет вызов в базу данных или сетевой ресурс.
В идеале я хотел бы обернуть каждый вызов в попытку / перехват, чтобы перехватить любую из распространенных сетевых или SQL-исключений, и дать пользователю возможность повторить попытку (при необходимости).Тем не менее, добавление этого кода к каждому вызову было бы очень трудоемким и раздутым, насколько это касается кода.
Я думал о переносе каждого из вызовов метода в другой метод, создании делегата,и завернуть код делегата в попытку / улов .. как-то так ...
(игнорировать синтаксис ... это просто концептуальный пример)
bool CallUpdatePassenger(int PassengerId,string PassengerName,string PhoneNumber)
{
Delegate del= Delegate.CreateDelegate(typeof(UpdatePassengerDelegate), typeof(IPassengerServices).GetMethod("RemoteUpdatePassenger"));
bool Res=(bool)CallDelegate(del,PassengerName,PhoneNumber);
}
object CallDelegate(Delegate del,params object[] args)
{
object Result=null;
try
{
Result=del.DynamicInvoke(args);
}
catch (Some.Timeout.Error.Or.Whatever te)
{
// take some action.. maybe retry etc..
}
return Result;
}
Может быть, есть более практичный способ сделать это?
Код генерируется автоматически (с помощью инструмента, который я написал). Я могу довольно легко включить что-то подобное выше, но я хочу избежать написания приведенного выше кода дляпри каждом вызове метода.
Кроме того, если я делаю что-то подобное, я могу рассчитывать методы, регистрировать вызовы методов и т. д. Это просто кажется немного неуклюжим (и не сильно типизированным).
Спасибо Рич.