2013-01-15 2 views
1

인터페이스를 소개 할 수 있어야하는 복잡한 애스펙트와 여러 포인트 컷을 구현해야합니다. 어떻게해야할지 모르겠습니다.PostSharp 애스펙트를 사용하여 인터페이스 및 LocationInterception 포인트 컷

목표는 클래스의 일부 필드 설정자를 가로 채기위한 것입니다. 따라서 데코 레이팅 된 필드에 이벤트 처리기를 통해 몇 가지 동작을 소개 할 수 있습니다. 일부 데이터를 변환 한 다음 특정 인터페이스에서 선언 된 이벤트를 발생시키고 자하므로이 필드를 포함하는 클래스에이 인터페이스를 도입하려고합니다.

가장 간단한 개념은 하위 클래스의 모든 이벤트를 캡처하여 컨테이너 클래스의 단일 외부 이벤트로 변환하는 컨테이너입니다.

그래서 LocationInterceptionAspect를 사용하여 메소드 pointcuts를 소개하는 방법을 알고 있습니다.

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

또한 InstanceLevelAspect로 인터페이스/메소드를 소개하는 방법.

그러나 2를 단일 측면으로 결합하는 방법은 아닙니다.

스코프가 포함 된 유형이 아닌 위치이므로 인터페이스 또는 멤버를 LocationInterceptionAspect 안에 간단히 소개 할 수는 없으며 컴파일되지 않습니다.

필자는 이것을 항상 2 가지 측면으로 분리 할 수 ​​있지만, 이는 각 측면이 독립적으로 작동하지 않는다는 것을 의미하며, 둘 다 항상 함께 적용되어야합니다.

답변

1

InstanceLevelAspect에 OnLocationSetValueAdvice (속성을 통해)를 추가 할 수있는 것처럼 보입니다.

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