Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PostSharp方面引入接口和位置截取切入点_C#_Postsharp - Fatal编程技术网

C# PostSharp方面引入接口和位置截取切入点

C# PostSharp方面引入接口和位置截取切入点,c#,postsharp,C#,Postsharp,我需要实现一个复杂的方面,它需要能够引入一个接口以及几个切入点。我不知道该怎么做 我的目标是拦截类上的一些字段设置器,以便引入一些行为(通过修饰字段上的事件处理程序)。我想转换一些数据,然后引发一个在特定接口上声明的事件,因此我想将此接口引入包含这些字段的类 最简单的概念是容器,它捕获其子级上的所有事件,并将它们转换为容器类上的单个外部事件 因此,我知道如何使用LocationInterceptionSpect引入方法切入点 public override void OnSetValue(Loc

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

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

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

因此,我知道如何使用LocationInterceptionSpect引入方法切入点

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)
    {
       ...
    }
}