Как перезаписать делегированные параметры
У меня есть сервис с методом, подобным приведенному ниже:
public static IEnumerable<IntegracaoParoquia> GetMyStuffFromRepo(MainForm form, Decimal myId)
{
IEnumerable<MyStuffClass> stuffCollection = null;
using (var unitOfWork = new UnitOfWork())
{
try
{
unitOfWork.OpenConnection();
stuffCollection = GetRepo().GetStuff(myId, unitOfWork.GetConnection(), unitOfWork.GetTransaction());
}
catch (Exception ex)
{
unitOfWork.Rollback();
LogError(form, ex);
}
}
return stuffCollection;
}
но так как может завершиться с дюжиной вызовов, как это, я хочу обернуть их в общий вызов, как показано ниже:
private static R CallMyRepoMethod<P, R>(MainForm form, P param, Func<P, IDbConnection, IDbTransaction, R> method)
{
R result = default(R);
using (var unitOfWork = new UnitOfWork())
{
try
{
unitOfWork.OpenConnection();
result = method(param, unitOfWork.GetConnection(), unitOfWork.GetTransaction());
}
catch (Exception ex)
{
unitOfWork.Rollback();
LogError(form, ex);
}
}
return result;
}
public static IEnumerable<IntegracaoParoquia> GetMyStuffFromRepo(MainForm form, Decimal myId)
{
return CallMyRepoMethod<Decimal, IEnumerable<MyStuffClass>>(form, myId, (x,y,z)=>GetRepo().GetStuff(myId, null, null) );
}
Проблема в том, что я хочу сохранить using
внутри моего делегата (и предоставленных соединения и транзакции), но из-за подписи метода репозитория. Когда вызывается (x,y,z)=>GetRepo().GetStuff(myId, null, null)
, он передает нулевые значения вместо использования правильных значений из делегата.
Это разумно, если учесть, что using
находится за пределами делегата.
Есть какой-то способ обойти это, или мне нужно переписать его, используя invoke
?