inversionhourglass / Rougamo

Compile-time AOP component. Works with any method, whether it is async or sync, instance or static. Uses an aspectj-like pattern to match methods.
MIT License
393 stars 47 forks source link

请问能否在OnEntry方法中实现对实际方法调用的拦截? #12

Closed SeptSky closed 2 years ago

SeptSky commented 2 years ago

你好! 新的版本实现了对异常抛出的控制,目前使用体验非常好,再次感谢!

我在考虑授权问题时,想通过添加Attribute的方式对指定的方法进行授权认证,满足授权认证则进行实际方法的调用,如果不满足则禁止方法的调用,对于有返回值的方法直接返回对应类型的默认值。虽然使用Castle的方法代理也能实现,但感觉还是使用你的Rougamo方式更加简单方便。不知这种方法拦截能否实现?

谢谢!

inversionhourglass commented 2 years ago

OnEntryOnSuccess可以通过MethodContext.ReplaceReturnValue(IMo, object)修改/设置返回值,可以参考 这里的代码

关于你说的希望“对有返回值的方法直接返回对应类型的默认值”,你可以通过MethodContext.RealReturnType获取到方法的返回值,关于如何通过Type对象获取该类型对应的默认值,如果想找一个比较高效率或者方便的方式,你可以从StackOverflow的 这个问题 里找到不同版本的方法,希望对你有所帮助

SeptSky commented 2 years ago

简单测试了一下,ReplaceReturnValue确实能够拦截实际方法的调用,完美!