在 C# 中不使用第三方库拦截方法调用
在不使用外部库的情况下拦截 C# 中的方法调用,可以使用几种方法,尽管没有一种方法很简单。以下列出了两种可考虑的方案:
继承目标类自 MarshalByRefObject
或 ContextBoundObject
,并定义一个继承自 IMessageSink
的属性。修改该属性以拦截方法调用并调用相应的日志记录方法。但是,这种方法会严重影响性能。
使用反射来检查类,检索属性,并将代码注入到现有方法中。这需要深入了解反射,并且由于 Reflection.Emit
的限制,可能不可行或不可靠。或者,可以考虑使用 CLR 编译器的扩展,但这需要 C# 开发人员通常不具备的专业知识。
使用调用方法修改的部分解决方案:
如果允许修改 Caller.Call
方法,则解决方案将更易于管理。通过使用拦截代理或创建一个实现与 Traced
相同接口的新类,可以拦截方法调用并在委托给原始类之前执行所需的日志记录。这种方法需要一些重构,但避免了 C# 中 AOP 的复杂性。
以上是如何在没有外部库的情况下拦截 C# 中的方法调用?的详细内容。更多信息请关注PHP中文网其他相关文章!