我想自定义属性应用到一些方法,指示他们应该作为一个事务处理。在一般情况下,我知道如何通过从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
}
如果保存数据( )方法抛出一个异常,那么我们会落在Using之外,并且scope.Complete不会被调用。
我不想要找到每一个实例,其中保存数据()被调用和手动添加使用语句周围的代码。我怎么能做一个导致这种行为的属性?
诅咒你和你的快速发布,Jon Skeet !!! :D我有几乎完全相同的职位;我正在查找PostSharp的链接,现在已经完成了。 – Randolpho 2009-04-07 15:41:16