1

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

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

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

所以,我知道如何使用 LocationInterceptionAspect 引入方法切入点;

public override void OnSetValue(LocationInterceptionArgs args)
{
    // attach event handler to args.Value.SomeEvent,
}

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

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

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

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

4

1 回答 1

1

看来我可以将 OnLocationSetValueAdvice(通过属性)添加到 InstanceLevelAspect,这很有效。

[IntroduceInterface(typeof(IMyInterface)]
public class CustomAspect : InstanceLevelAspect
{
    [OnLocationSetValueAdvice]
    [MulticastPointcut(Targets = MulticastTargets.Field, Attributes = MulticastAttributes.Instance)]
    public void OnSetValue(LocationInterceptionArgs args)
    {
       ...
    }
}
于 2013-01-15T02:08:41.020 回答