我想将自定义属性应用于某些方法,指示它们应作为事务处理。一般来说,我知道如何通过继承 System.Attribute 创建自定义属性,但我不知道如何执行我需要的操作。
我的目标是这样的:
[TransactionalMethod()]
public void SaveData(object someObject)
{
// ... maybe some processing here
// ... then the object gets saved to a database
someObject.Save();
}
TransactionalMethod() 属性将使该方法的行为就像包装在 TransactionScope 中一样......
try
{
using(TransactionScope scope = new TransactionScope())
{
SaveData(someObject);
scope.Complete();
}
}
catch
{
// handle the exception here
}
如果 SaveData() 方法抛出异常,那么我们将超出使用范围,并且不会调用scope.Complete。
我不想找到调用 SaveData() 的每个实例,并在其周围手动添加代码 using 语句。我怎样才能创建一个导致这种行为的属性?
基本上你想要面向方面的编程 http://en.wikipedia.org/wiki/Aspect-oriented_programming (AOP).
看一下后锐利 http://postsharp.org- 它可以很好地处理这个问题。还有其他选项,但我没有使用过。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)