我需要实现一个复杂的方面,需要能够引入一个接口,以及几个切入点。我不知道该怎么做。
我的目标是拦截类上的一些字段设置器,以便我可以引入一些行为(通过装饰字段上的事件处理程序)。我想转换一些数据,然后引发一个在特定接口上声明的事件,所以我想将这个接口引入包含这些字段的类。
最简单的概念是一个容器,它捕获其子节点上的所有事件,并将它们转换为容器类中的单个外部事件。
所以,我知道如何使用LocationInterceptionAspect;
引入方法切入点public override void OnSetValue(LocationInterceptionArgs args)
{
// attach event handler to args.Value.SomeEvent,
}
以及如何使用InstanceLevelAspect引入接口/方法。
但不是如何将2组合成一个方面。
我不能简单地在LocationInterceptionAspect中引入接口或成员,因为作用域是位置,而不是包含类型,并且它不会编译。
我总是可以将其分为两个方面,但这意味着每个方面都不会独立运作,我必须确保两者始终一起应用。
答案 0 :(得分:1)
看来我可以将OnLocationSetValueAdvice(通过属性)添加到InstanceLevelAspect,这样就可以了。
[IntroduceInterface(typeof(IMyInterface)]
public class CustomAspect : InstanceLevelAspect
{
[OnLocationSetValueAdvice]
[MulticastPointcut(Targets = MulticastTargets.Field, Attributes = MulticastAttributes.Instance)]
public void OnSetValue(LocationInterceptionArgs args)
{
...
}
}