Как переписать делегированные параметры? - PullRequest
0 голосов
/ 06 мая 2019

Как перезаписать делегированные параметры

У меня есть сервис с методом, подобным приведенному ниже:

    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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...