dotnetcore / AspectCore-Framework

AspectCore is an AOP-based cross platform framework for .NET Standard.
MIT License
1.7k stars 325 forks source link

特殊场景:创建接口实现类时,覆盖了c# 8.0 的接口默认实现方法 #223

Open fs7744 opened 4 years ago

fs7744 commented 4 years ago

该场景特殊,一般aop 使用场景应该佷难遇见

https://github.com/dotnetcore/AspectCore-Framework/blob/master/src/AspectCore.Core/Utils/ProxyGeneratorUtils.cs#L365

应该判断 method.IsAbstract

if (method.IsAbstract)
            {
                var methodBuilder = implTypeBuilder.DefineMethod(method.Name, InterfaceMethodAttributes,
                    method.CallingConvention, method.ReturnType,
                    method.GetParameters().Select(x => x.ParameterType).ToArray());
                var ilGen = methodBuilder.GetILGenerator();
                if (method.ReturnType != typeof(void))
                {
                    ilGen.EmitDefault(method.ReturnType);
                }
                ilGen.Emit(OpCodes.Ret);
                implTypeBuilder.DefineMethodOverride(methodBuilder, method);
            }
huoshan12345 commented 4 years ago

@fs7744 能否提供一些复现的案例,你说的覆盖具体是指怎么覆盖了

hjkl950217 commented 3 years ago

插眼

fs7744 commented 3 years ago

时间太久了,要不是有人提醒,都已经忘了这个issue了, 当时应该是上面那段代码所示, 有使用接口默认方法的场景都会被替换为代理类中的实现的方法,

huayh commented 2 years ago

是如何解决的呢?我现在也遇到了这个问题