C# 如何通过属性控制方法行为?

C# 如何通过属性控制方法行为?,c#,.net,attributes,C#,.net,Attributes,我想对一些方法应用一个自定义属性,指出它们应该作为事务处理。一般来说,我知道如何通过从System.Attribute继承来创建自定义属性,但我不知道如何做我需要的事情 我的目标是这样的: [TransactionalMethod()] public void SaveData(object someObject) { // ... maybe some processing here // ... then the object gets saved to a database

我想对一些方法应用一个自定义属性,指出它们应该作为事务处理。一般来说,我知道如何通过从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()方法引发异常,那么我们将不在Using范围内,并且不会调用作用域.Complete

我不想找到调用SaveData()的每个实例,并在其周围使用语句手动添加代码。如何创建导致此行为的属性?

基本上是您想要的(AOP)


看看-它可以处理得很好。还有其他选择,但我没有使用它们。

Aspect.NET是另一个项目,具有相同的目的

诅咒你和你的快速发布,Jon Skeet!!!:D我的职位几乎完全相同;我正在查找指向PostSharp的链接,您已经找到了。我知道有几个URL没有查找,PostSharp.org就是其中之一:)