-
Notifications
You must be signed in to change notification settings - Fork 25
Method interceptors in depth
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!