PostSharp 애스펙트가 주어진 클래스의 모든 하위 클래스의 공용 메소드에만 적용되도록 지정할 수 있습니까?주어진 클래스의 하위 클래스에 정의 된 메서드에만 포스트 샤프 애스펙트를 적용하는 방법은 무엇입니까?
내 말은 ClassA
이고 OnMethodBoundaryAspect
은 ClassA
에서 상속 된 클래스에 정의 된 public 메소드에만 적용되기를 원합니다.
PostSharp 애스펙트가 주어진 클래스의 모든 하위 클래스의 공용 메소드에만 적용되도록 지정할 수 있습니까?주어진 클래스의 하위 클래스에 정의 된 메서드에만 포스트 샤프 애스펙트를 적용하는 방법은 무엇입니까?
내 말은 ClassA
이고 OnMethodBoundaryAspect
은 ClassA
에서 상속 된 클래스에 정의 된 public 메소드에만 적용되기를 원합니다.
이 동작을 제어하려면 속성을 사용해야합니다.
MulticastInheritance.None
입니다. Aspect는 파생 클래스에 상속되지 않습니다.MulticastInheritance.Strict
파생 클래스가 기본 클래스 멤버 (즉, 재정의 된 메서드)의 애스펙트를 상속하게합니다.MulticastInheritance.Multicast
은 파생 클래스가 파생 클래스에서 애스펙트를 지정한 것처럼 애스펙트를 완전히 상속합니다.그런 다음 의 AttributeTargetMemberAttributes
을 사용해야 속성을 적용해야하는 멤버를 지정할 수 있습니다. 귀하의 경우에는 AttributeTargetMemberAttributes = MulticastAttributes.Public
이됩니다.
마지막으로 강제로 PostSharp가 기본 클래스 자체에 특성을 적용하지 않아야 할 경우 다른 속성 인스턴스에 AttributeExclude
속성을 사용하여 특정 상황에서 애스펙트를 비활성화 할 수 있습니다. 이 컴파일 타임 동작입니다
[MyAspect(AttributeInheritance = MulticastInheritance.Multicast, AttributeTargetMemberAttributes = MulticastAttributes.Public)]
[MyAspect(AttributeExclude = true)]
public class ClassA
{
//...
}
참고하고 모든에 PostSharp를 실행해야합니다 : "단지 주어진 클래스의 하위 클래스의 모든 공용 방법에"
그래서, 다음에 의해 만족 될 것이다 의도 된대로 작동하도록 기본 클래스에서 파생되는 프로젝트 PostSharp로 개선되지 않은 프로젝트의 클래스에서 파생 된 경우, 애스펙트 동작이 상속되지 않습니다.
당신의 의견을 보내 주셔서 감사합니다. Daniel,하지만 적어도 내가 당신이 말한 것을 오해하겠습니다. 원하는 옵션을 얻었습니다. "주어진 클래스에서 상속 된 클래스에 정의 된 public 메소드에만 속성을 적용하십시오. * –
@ gsc-frank 질문이 완전히 명확하지 않았습니다. 나는 그것의 의도 된 의미를 더 가깝게 (잘하면) 일치시키기 위해 나의 대답을 업데이트했다. –