2009-05-26 15 views
0

Ich möchte nur das aufgerufen, wenn eine Eigenschaft festgelegt ist. Warum funktioniert das nicht?Was ist los mit diesem Aspekt

[DirtyTrackingAttribute(AttributeTargetElements = 
    PostSharp.Extensibility.MulticastTargets.Property)] 
class Program 
{ 

    public static string Test { get; set; } 

    static void Main(string[] args) 
    { 
     TestIt(); 
     Test = "foo"; 
     Console.ReadKey(); 
    } 

    private static void TestIt() 
    { 
     Console.WriteLine("Real method called"); 
    } 
} 

[Serializable] 
public class DirtyTrackingAttribute : OnMethodInvocationAspect 
{ 
    public override void OnInvocation(MethodInvocationEventArgs eventArgs) 
    { 
     Console.WriteLine("Property invoked"); 
     eventArgs.Proceed(); 
    } 
} 

Antwort

1

Wenn Sie den Aspekt wollen nur auf Eigenschaft Setter angewendet werden, können Sie den Namen der Methode mit dem Ausdruck „set_ *“ filtern:

[DirtyTrackingAttribute(AttributeTargetMembers="set_*")] 

Postsharp 1. * nicht unterstützt ausdrücklich Eigenschaften ; Eigenschaftenaccessoren werden als einfache Methoden betrachtet.

+0

Nice, ich wusste nicht, dass Sie auf Eigenschaftsnamen direkt auf dem Attribut filtern können ... Ich habe auch nur einmal mit PostSharp gespielt, wo ich auf Grundstückszugriff abfangen wollte, und das ist, wie ich habe es geschafft: http://fgheyssels.blogspot.com/2008/08/locking-system-with-aspect-oriented.html –