作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否有任何方法可以最小化事务范围以确保在流程中调用提交、完成或回滚操作?
鉴于此功能:
public void DoSomething(int param)
{
using (TransactionScope transactionScope = new TransactionScope())
{
factory.DoSomething(param);
factory.DoSomethingElse(param);
transactionScope.Complete();
}
}
有什么方法可以通过 IDisposable 接口(interface)调用 Verify 函数吗?它似乎只包含一个 Dispose 函数,我想测试 Commit 或 Rollback。
谢谢
最佳答案
TransactionScope是密封类,仅派生自 IDisposable
接口(interface)。正如我所考虑的,您需要为 TransactionScope
和接口(interface)创建自己的包装类,以便您可以使用和模拟它。
class TransScopeWrapper : ITransScope, IDisposable
{
private TransactionScope scope;
public TransScopeWrapper()
{
scope = new TransactionScope();
}
public void Dispose()
{
scope.Dispose();
}
public void Complete()
{
scope.Complete();
}
public void Rollback()
{
...
}
}
internal interface ITransScope
{
void Complete();
void Rollback();
}
您还需要以某种方式注入(inject) ITransScope
模拟。我会按照以下方式进行
public void DoSomething(int param)
{
using (TransScopeWrapper transactionScope = new TransScopeWrapper ())
{
DoSomething(param, transactionScope);
}
}
internal void DoSomething(int param, ITransScope transaction)
{
factory.DoSomething(param);
factory.DoSomethingElse(param);
transaction.Complete();
}
现在您可以测试模拟 ITransScope
的 DoSomething(int param, ITransScope transaction)
方法。
关于c# - C# 中的最小起订量事务范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36059017/
我是一名优秀的程序员,十分优秀!