【发布时间】:2012-03-04 10:05:14
【问题描述】:
我有以下代码被复制并粘贴到许多地方。唯一的区别是在使用的中间有一个单独的调用会改变。所以我做了一个
public MyEntity Read(int id)
{
using (SqlConnection sqlConn = new SqlConnection(ConnectionString))
{
sqlConn.Open();
return MyDataLayer.Select(sqlConn, id);
}
}
所以我想出了这个。但是,我的问题是如何将 sqlConn var 传递给调用?
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
}
在我的脑海中 - 看起来我需要在 MyDataLayer 中为 SqlConn 创建一个属性,并使用接口在 UsingSqlConnection 方法中分配它,而不是将其作为参数传递。虽然我不排除这种重构,但我想知道我是否遗漏了什么,因为这是我第一次尝试以这种方式使用 Func 代表。
【问题讨论】: