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