我有三种方法:
public void Save<T>(T entity)
{
using (new Transaction())
{
Session.Save(entity);
}
}
public void Create<T>(T entity)
{
using (new Transaction())
{
Session.Create(entity);
}
}
public void Delete<T>(T entity)
{
using (new Transaction())
{
Session.Delete(entity);
}
}
如您所见,唯一不同的是using
块内的方法调用。我怎样才能重写这个,所以它是这样的:
public void Save<T>(T entity)
{
TransactionWrapper(Session.Save(entity));
}
public void Create<T>(T entity)
{
TransactionWrapper(Session.Create(entity));
}
public void Save<T>(T entity)
{
TransactionWrapper(Session.Save(entity));
}
换句话说,我将方法调用作为参数传递,TransactionWrapper
方法围绕方法调用包装事务。
答案 0 :(得分:4)
您可以将Action<T>传递给方法以指定要执行的操作:
private void ExecuteInTransaction<T>(Action<T> action, T entity)
{
using (new Transaction())
{
action(entity);
}
}
public void Save<T>(T entity)
{
ExecuteInTransaction(Session.Save, entity);
}
但如果您的 ExecuteInTransaction 方法并不复杂,那么IMO对您原始代码的改进并不值得。