有什么方法可以用 PostSharp 包装方法调用吗?我必须在特定调用周围/外部添加代码。
OnMethodBound
添加代码inside 指定的方法和MethodInterception
方面将调用重定向到方面,但我必须添加调用外的代码。
示例: 没有方面:
...
call();
...
方面:
beforePart();
call();
afterPart();
最佳答案
目前,PostSharp 围绕调用站点编织方面的唯一场景是当您将该方面应用到引用程序集中的方法时。
在项目中应用方面时,可以在AttributeTargetAssemblies 中设置外部程序集的名称。属性(property)。
[Log(AttributeTargetAssemblies = "SomeLibrary", ...)]
当然,PostSharp 不会修改现有的外部程序集,而是会围绕对引用程序集的调用在您的项目程序集中编织方面。
目前不支持将方面应用于来自同一程序集的方法调用。在大多数情况下,这不是必需的,或者应该有一个合理的解决方法。
如果您提供有关同步方法的更多详细信息以及为什么无法使用方法拦截,也许我们能够解决此问题。
更新。
可能的解决方法是使用方面引入同步锁。你可以写一个自定义 OnMethodBoundaryAspect或使用 SynchronizedAttribute来自线程模式库。
然后你可以使用Aspect Dependency or Aspect Priority确保在线程方面之前引入测量方面。这样,行为将与在调用站点周围引入测量方面时的行为相同。
[Serializable]
[AspectTypeDependency(AspectDependencyAction.Order,
AspectDependencyPosition.Before,
typeof(SynchronizedAttribute))]
public class MeasureTimeAttribute : OnMethodBoundaryAspect
{
// ...
}
关于c# - 使用 PostSharp 包装方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809356/