У меня есть следующий код, который копируется и вставляется в нескольких местах.Единственное отличие состоит в том, что в середине употребления происходит один звонок, который меняется.Итак, я сделал
public MyEntity Read(int id)
{
using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
{
sqlConn.Open();
return MyDataLayer.Select(sqlConn, id);
}
}
Итак, я придумал это.Однако моя проблема заключается в том, как передать переменную sqlConn в вызов?
public TResult UsingSqlConnection<TResult>(Func<TResult> myFunction)
{
using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
{
sqlConn.Open();
return myFunction();
}
}
public MyEntity Read(int id)
{
return UsingSqlConnection(() => MyDataLayer.Read(id));
//PROBLEM: Read() requires sqlConn
}
Вне головы - похоже, вместо того, чтобы передавать его как параметр, мне нужно создать свойстводля SqlConn в MyDataLayer и назначьте его в методе UsingSqlConnection с помощью интерфейса.Хотя я не исключаю этого рефактора, мне интересно, что я что-то упустил, так как это моя первая попытка с делегатами Func таким образом.