This is an add-in for Fody
Compile time decorator pattern via IL rewriting
Nuget package http://nuget.org/packages/MethodDecorator.Fody
To Install from the Nuget Package Manager Console
PM> Install-Package MethodDecorator.Fody
public interface IMethodDecorator
{
void OnEntry(MethodBase method);
void OnExit(MethodBase method);
void OnException(MethodBase method, Exception exception);
}
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor)]
public class InterceptorAttribute : Attribute, IMethodDecorator
{
public void OnEntry(MethodBase method)
{
TestMessages.Record(string.Format("OnEntry: {0}", method.DeclaringType.FullName + "." + method.Name));
}
public void OnExit(MethodBase method)
{
TestMessages.Record(string.Format("OnExit: {0}", method.DeclaringType.FullName + "." + method.Name));
}
public void OnException(MethodBase method, Exception exception)
{
TestMessages.Record(string.Format("OnException: {0} - {1}: {2}", method.DeclaringType.FullName + "." + method.Name, exception.GetType(), exception.Message));
}
}
public class Sample
{
[Interceptor]
public void Method()
{
Debug.WriteLine("Your Code");
}
}
public class Sample
{
public void Method()
{
MethodBase method = methodof(Sample.Method, Sample);
InterceptorAttribute attribute = (InterceptorAttribute) method.GetCustomAttributes(typeof(InterceptorAttribute), false)[0];
attribute.OnEntry(method);
try
{
Debug.WriteLine("Your Code");
attribute.OnExit(method);
}
catch (Exception exception)
{
attribute.OnException(method, exception);
throw;
}
}
}
Icon courtesy of The Noun Project