Identity方法的开始和结束
本文关键字:结束 开始 方法 Identity | 更新日期: 2023-09-27 18:13:10
我正在为一个方法创建跟踪,并希望它与自定义属性一起使用。我将用TraceMethod
装饰每种方法。
,
[TraceMethod()]
public void SomeMethod()
{
}
public class TraceMethod : Attribute
{
public void StartTrace(){}
public void EndTrace(){}
}
,
如何在SomeMethod
开始执行前调用StartTrace()
,在SomeMethod
执行结束后调用EndTrace()
?这可能吗?
你正在尝试做的是面向方面的编程,这是目前在。net世界中不支持开箱即用的东西。您将不得不使用第三方组件;有一些是付费的和开源的。
你可以修改方法主体:
public void SomeMethod()
{
var trace = new Trace();
try
{
... rest of method
}
finally
{
trace.EndTrace();
}
}
public class TraceMethod : Attribute
{
public TraceMethod() => StartTrace();
public void StartTrace() { ... }
public void EndTrace() { ... }
}
也许创建一个自定义类来标记函数的作用域?在函数开始时创建类的实例,当函数终止时,类离开作用域并调用析构函数。
构造函数和析构函数标记函数的开始和结束。
编辑:如前所述,不能保证在对象超出作用域后立即调用析构函数。最好是使用using()
块:
public void SomeMethod()
{
using (TraceMethod trace = new TraceMethod())
{
}
}
public class TraceMethod : IDisposable
{
public TraceMethod() { StartTrace(); } // Constructor
public void Dispose() { EndTrace(); } // Gets called when leaving the using() block
private void StartTrace() { ... }
private void EndTrace() { ... }
}