/Kunet.AsyncInterceptor

AsyncInterceptor for Castle.DynamicProxy.

Primary LanguageC#MIT LicenseMIT

Kunet.AsyncInterceptor

Build on Push Nuget Version

Inspired by stakx.DynamicProxy.AsyncInterceptor, but rewrite with less reflection to get better performance.

This library allows you to smoothly connect Castle.DynamicProxy with your async/await code, it provides an abstract AsyncInterceptor class, your interceptor inherited from this class can get the ability to intercept method which return value is Task, Task<T>, ValueTask or ValueTask<T>. You are also able to extend the library to support custom task-like types.

class Example : AsyncInterceptor
{
    // This gets called when a non-awaitable method is intercepted:
    protected override void Intercept(IInvocation invocation)
    {
        invocation.Proceed();
        invocation.ReturnValue = ... ;
    }

    // Or this gets called when an awaitable method is intercepted:
    protected override async ValueTask InterceptAsync(IAsyncInvocation invocation)
    {
        await invocation.ProceedAsync();
        invocation.AsyncResult = ... ;
    }
}