c# - 如何向 PostSharp 属性添加参数?

标签 c# postsharp

我有一个简单的 PostSharp 日志属性:

[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
    private ILog _logger;
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());
        _logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
    }
}

我想通过将有关方法参数的信息添加到日志条目来使此属性更加灵活,但前提是它需要。

[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
    private ILog _logger;
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());

        // if ShowParameters = true
        _logger.DebugFormat("Entered {0} with args:{1}", eventArgs.Method.Name, args);
        // else
        _logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
        // endif
    }
}

带有 IF 的伪代码是我不确定该怎么做的。如何将其传递到属性中?我希望它看起来像这样,但我不知道如何在属性代码中处理它:

[MethodLogging(ShowParameters=true)]
public void SomeCrazyMethod(int CustomerId, string SecretName) {...}

最佳答案

只需声明一个属性

[Serializable]
public class MethodLoggingAttribute : OnMethodBoundaryAspect
{
    private ILog _logger;
    public override void OnEntry(MethodExecutionEventArgs eventArgs)
    {
        _logger = LogManager.GetLogger(eventArgs.Method.DeclaringType.ToString());
        if(ShowParameters = true)
        {
            _logger.DebugFormat("Entered {0} with args:{1}", eventArgs.Method.Name, args);
        }
        else
        {
            _logger.DebugFormat("Entered {0}", eventArgs.Method.Name);
        }
    }

    private bool m_ShowParameters;

    public bool ShowParameters
    {
        get { return m_ShowParameters; }
        set { m_ShowParameters = value; }
    }
}

然后你就可以按照你说的方式来指定了。

关于c# - 如何向 PostSharp 属性添加参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/737833/

相关文章:

C#算术题

c# - HttpWeb 请求错误 : 503 server unavailable

c# - MDT EventRegister nuget 以代码 1 退出

c# - 如何使用迁移将描述添加到 Entity Framework Core 代码优先中的列?

c# - PostSharp:在目标构造函数之后初始化实例范围的方面

c# - 如何编写 PostSharp Invoke 方面来简化跨线程控制更新

c# - 在多个成员上使用 Postsharp 方面,无需对其进行多播

c# - 当数据可以包含逗号时在逗号上拆分字符串

c# - 使用 Postsharp 将方面应用到程序集的风险

c# - 为什么编译后代码注入(inject)比预编译代码注入(inject)更好?