PostSharp方面介绍了一个Interface AND LocationInterception切入点

时间:2013-01-15 00:41:30

标签: c# postsharp

我需要实现一个复杂的方面,需要能够引入一个接口,以及几个切入点。我不知道该怎么做。

我的目标是拦截类上的一些字段设置器,以便我可以引入一些行为(通过装饰字段上的事件处理程序)。我想转换一些数据,然后引发一个在特定接口上声明的事件,所以我想将这个接口引入包含这些字段的类。

最简单的概念是一个容器,它捕获其子节点上的所有事件,并将它们转换为容器类中的单个外部事件。

所以,我知道如何使用LocationInterceptionAspect;

引入方法切入点
public override void OnSetValue(LocationInterceptionArgs args)
{
    // attach event handler to args.Value.SomeEvent,
}

以及如何使用InstanceLevelAspect引入接口/方法。

但不是如何将2组合成一个方面。

我不能简单地在LocationInterceptionAspect中引入接口或成员,因为作用域是位置,而不是包含类型,并且它不会编译。

我总是可以将其分为两个方面,但这意味着每个方面都不会独立运作,我必须确保两者始终一起应用。

1 个答案:

答案 0 :(得分:1)

看来我可以将OnLocationSetValueAdvice(通过属性)添加到InstanceLevelAspect,这样就可以了。

[IntroduceInterface(typeof(IMyInterface)]
public class CustomAspect : InstanceLevelAspect
{
    [OnLocationSetValueAdvice]
    [MulticastPointcut(Targets = MulticastTargets.Field, Attributes = MulticastAttributes.Instance)]
    public void OnSetValue(LocationInterceptionArgs args)
    {
       ...
    }
}