無需修改程式碼即可監控 C# 方法呼叫
問題:
如何在不更改類別的公共介面或使用外部 AOP 框架的情況下追蹤和記錄 C# 方法調用,包括方法簽名和參數值?
方法:
由於內建 AOP 功能有限,在不更改程式碼的情況下直接攔截 C# 中的方法呼叫是很困難的。 這裡有兩個可能的解決方案,每個都有限制:
1。自訂屬性攔截:
利用 MarshalByRefObject
或 ContextBoundObject
,您可以建立一個實作 IMessageSink
的自訂屬性。應用於方法的該屬性將攔截呼叫。 然而,這種方法會帶來顯著的效能開銷(可能會降低 10 倍)。
2。運行時程式碼操作(反射):
反射允許在運行時將日誌記錄程式碼注入到目標方法中。 這種方法需要先進的反思知識,並且具有高度侵入性。 此外,使用 Reflection.Emit
修改現有方法可能並非在所有情況下都可行。
重要因素:
Caller.Call
)以包含日誌記錄可能是更簡單、效能更高的解決方案。 以上是如何在不修改類別或使用 AOP 函式庫的情況下攔截並記錄 C# 方法呼叫?的詳細內容。更多資訊請關注PHP中文網其他相關文章!