2010-03-24 1 views
3

postsharp 1.5 및 OnMethodBoundaryAspect가있는 aspect에서 작업하고 있습니다. 내 애스펙트의 기본 동작은 다음과 같습니다.PostSharp OnMethodBoundaryAspect

1 - 클래스 수준에서 특성을 사용하는 경우이 특성은 PUBLIC 메서드에만 적용됩니다.

2 - 애스펙트 사용자는 애스펙트를 개인 또는 보호 된 방법으로 지정할 수 있습니다. 나는조차 구축하지 않습니다이 [MulticastAttributeUsage ( MulticastTargets.Method, TargetMemberAttributes = MulticastAttributes.Public)] 점 1 개 작품,하지만 경우 2를 사용하는 경우

는 becaue 호환되지 않습니다.

그런 다음 사용하려고했습니다 : AttributeTargetTypeAttributes = MulticastAttributes.Public; aspect의 생성자에 하지만 작동하지 않습니다.

대단히 감사합니다.

답변

5

불행히도 단일 종단 클래스를 사용하여 요구 사항을 구현할 방법이 없습니다.

세 가지 측면 클래스를 사용할 수 있습니다 :

public abstract class MyAspect : OnMethodBoundaryAspect 
{ 
} 

[MulticastAttributeUsage(..., 
     TargetMembersAttributes = MulticastAttributes.Public)] 
[AttributeUsage(AttributeTargets.Class)] 
public class ClassLevelAspect : MyAspect 
{ 
} 

[MulticastAttributeUsage(..., 
    TargetMembersAttributes = MulticastAttributes.NonPublic)] 
[AttributeUsage(AttributeTargets.Method)] 
public class MethodLevelAspect : MyAspect 
{ 
} 

-gael

+0

감사합니다. Gael,이 방법을 사용하겠습니다. –

0

또 다른 가능한 방법은 동적 측면을 제공하는 IAspectProvider을 사용하는 것입니다.

일반적인 방법과 생성자에 대해 다른 측면을 주입하는 예제는 PostSharp 교육에서 Aspect Providers에 대해 찾을 수 있습니다.

제공된 샘플을 사용할 수 있으며 'ReflectedType.IsPublic'조건에 따라 삽입 할 애스펙트를 결정하십시오.

+1

원래 질문이 2 년 전에 게시되었음을 압니다. 그러나 저는 같은 문제를 가지고 있었고이 접근법이 내 요구에 더 잘 맞았다는 것을 알았습니다. – avivr