Method interceptors in depth - TylerBrinks/Snap GitHub Wiki

Method interceptors are slightly more advanced than simply behaving as a proxy wrapper. As of the current build, interceptors can opt to support a “BeforeInvocation” and an “AfterInvocation” method. As the need arises, more methods, events, delegates, whatever… will be built out. This is why Snap is a powerful framework.

Overriding these methods allows you more control over how your interceptor behaves. In some ways, this pattern is similar to a constructor/destructor method, or a unit test’s setup/tear down method. It’s affording you flexibility to act independent of the impending target method invocation.

Here’s a simple sample for measuring execution duration. Yes, this could be done all within one method; it’s just an example.

public class MeasureDurationInterceptor : MethodInterceptor
{
    private DateTime _start;
    // Called before InterceptMethod
    public override void BeforeInvocation()
    {
        _start = DateTime.Now;
    }
    public override void InterceptMethod(IInvocation invocation, MethodBase method, Attribute attribute)
    {
        // Elided
    }
    // Called after InterceptMethod
    public override void AfterInvocation()
    {
        var duration = DateTime.Now - _start;
        // Do something meaningful with the result.
    }
}

Happy coding!

⚠️ **GitHub.com Fallback** ⚠️