/// <summary> /// /// </summary> /// <param name="invocation"></param> /// <returns></returns> protected override async ValueTask InterceptAsync(IAsyncInvocation invocation) { if (!_configuration.CacheList.TryGetValue(invocation.TargetMethod, out var pointCut)) { if (!invocation.TargetMethod.DeclaringType.GetTypeInfo().IsGenericType || !_configuration.DynamicCacheList.TryGetValue(invocation.TargetMethod.GetMethodInfoUniqueName(), out var pointCutDynamic)) { //该方法不需要拦截 await invocation.ProceedAsync(); return; } pointCut = pointCutDynamic; } var aspectContext = new AspectContext(_component, invocation); aspectContext.Proceed = async() => { await invocation.ProceedAsync(); }; var runTask = pointCut.AspectFunc.Value; await runTask(aspectContext); }
/// <summary> /// /// </summary> /// <param name="invocation"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> protected override async ValueTask InterceptAsync(IAsyncInvocation invocation) { #region 先从缓存里面拿到这个方法时候打了继承AspectInvokeAttribute的标签 if (!_cache.CacheList.TryGetValue(invocation.TargetMethod, out var attribute)) { //动态泛型类 if (!invocation.TargetMethod.DeclaringType.GetTypeInfo().IsGenericType || (!_cache.DynamicCacheList.TryGetValue(invocation.TargetMethod.GetMethodInfoUniqueName(), out var AttributesDynamic))) { await invocation.ProceedAsync(); return; } attribute = AttributesDynamic; } #endregion var aspectContext = new AspectContext(_component, invocation); aspectContext.Proceed = async() => { await invocation.ProceedAsync(); }; var runTask = attribute.AspectFunc.Value; await runTask(aspectContext); }
protected override async ValueTask InterceptAsync(IAsyncInvocation invocation) { await this.task; if (this.proceed) { await invocation.ProceedAsync(); } }
protected override async ValueTask InterceptAsync(IAsyncInvocation invocation) { await invocation.ProceedAsync(); if (invocation.Result is string) { invocation.Result = "b"; } }
/// <inheritdoc /> public async Task InterceptAsync(IAsyncInvocation invocation) { var freezableClock = _freezableClockFactory(); freezableClock.FreezeTime(); await invocation.ProceedAsync(); freezableClock.UnfreezeTime(); }
/// <summary> /// /// </summary> /// <param name="invocation"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> protected override async ValueTask InterceptAsync(IAsyncInvocation invocation) { //单例的 if (_instanceCache.TryGetValue(invocation.TargetMethod, out var instance)) { invocation.Result = instance; return; } await invocation.ProceedAsync(); _instanceCache.TryAdd(invocation.TargetMethod, invocation.Result); }
/// <inheritdoc /> public async Task InterceptAsync(IAsyncInvocation invocation) { var retryPolicy = _retryPolicyCoordinator.RequestPolicy(); await retryPolicy.ExecuteAsync(async() => await invocation.ProceedAsync()); }
public async Task InterceptAsync(IAsyncInvocation invocation) { await invocation.ProceedAsync(); }