【问题标题】:Finally Action on PostSharp Exception aspect最后对 PostSharp 异常方面的操作
【发布时间】:2012-03-04 13:14:44
【问题描述】:

我遇到了以下情况

private volatile bool _inProgress = false;

public void DoSomethingStart()
{
  if(_inProgress == false)
  {
      foo.BeginInvoke(null, null); // DoSomething
      _inProgress = true;
  }
}

[CatchAllExceptionsFromHere]
private void DoSomething()
{ }

到目前为止,这些方面都有效。所有异常都从 CatchAllExceptionsFromHere 处理。但我想在方面的 finally 子句中设置“_inProgress = false” - 所以如果 DoSomething 已经完成,“_inProgress”应该设置为 false。由于 Attributes 不能接受任何对象 - 是否有解决方法?

谢谢迈克尔

【问题讨论】:

    标签: postsharp


    【解决方案1】:

    方面可以在声明中取值来设置属性值,或者就像构造函数一样。你想要的是一个 OnMethodBoundaryAspect 和 OnExit 方法(即使发生错误也会触发,所以它就像一个 finally)你想设置 _inProgress 的值。

    但是,切面必须是实例切面,您需要导入 _inProgress 成员或只引入它,以便切面可以访问它。这取决于您的班级是否需要访问它。如果确实有方面导入成员。阅读有关如何使用这些链接执行这些操作的信息

    【讨论】:

    • 非常感谢 - 这就是我想要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    相关资源
    最近更新 更多