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() ?这可能吗?

Identity方法的开始和结束

你正在尝试做的是面向方面的编程,这是目前在。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() { ... }
}