In No Buzzword AOP --- When we don't have aop, idior described a property debugging situation.
This is the AOP way based on AspectWeaver0.6.
DebugPropertyModifyingAspect.cs:
using
System;
using AspectWeaver.Aspects;
namespace TestAspects
{
public class DebugPropertyModifyingAspect : Aspect
{
[InlineAtStart("//Method[starts-with(@name, 'set_')]"), InlineBeforeReturn("//Method[starts-with(@name, 'set_')]")]
public void CodeForPrintPropertyValue()
{
string contextInfo = GetContextInfo();
string propertyName = contextInfo.Substring(contextInfo.IndexOf("_") + 1, contextInfo.IndexOf("(") - contextInfo.IndexOf("_") - 1);
Console.WriteLine(string.Format("{0}={1}", propertyName, this.GetType().GetProperty(propertyName).GetValue(this, null)));
}
}
}
using AspectWeaver.Aspects;
namespace TestAspects
{
public class DebugPropertyModifyingAspect : Aspect
{
[InlineAtStart("//Method[starts-with(@name, 'set_')]"), InlineBeforeReturn("//Method[starts-with(@name, 'set_')]")]
public void CodeForPrintPropertyValue()
{
string contextInfo = GetContextInfo();
string propertyName = contextInfo.Substring(contextInfo.IndexOf("_") + 1, contextInfo.IndexOf("(") - contextInfo.IndexOf("_") - 1);
Console.WriteLine(string.Format("{0}={1}", propertyName, this.GetType().GetProperty(propertyName).GetValue(this, null)));
}
}
}
Open "DebugPropertyValueModifying/DebugPropertyValueModifying.sln" to rebuild all projects.
Run "DebugPropertyValueModifying/TestConsole/bin/Debug/TestConsole.exe" before and after weaving.
Execute "DebugPropertyValueModifying/DoWeave.bat" to do the weaving.
TestConsole.exe running result before weaving:
Running OK!
Press any key to continue...
TestConsole.exe running result after weaving:
Name=
Name=name1
Name=name1
Name=name2
ID=0
ID=1
ID=1
ID=2
Speed=0
Speed=10
Speed=10
Speed=100.5
Speed=100.5
Speed=1221.12
Running OK!
Press any key to continue...
Download Source Code