2009-09-15 4 views
0

PostSharp이 오류를 제공합니다 :추상 메소드에 애스펙트 추가하기?

PostSharp: Cannot apply an OnMethodInvocation aspect (...) with target-site weaving on the abstract or external method "...". Consider excluding the aspect from this method or use call-site weaving.

하기 권장 호출 사이트 직물이 나에 대한 적절한 해결책이 아니다. 어떤 방법으로 추상/후 처리를 추가 할 수 있습니까?

답변

1

애스펙트 상속을 사용하는 것이 좋습니다. 애스펙트는 추상 메소드를 구현하는 모든 메소드에 자동으로 추가됩니다.

자세한 내용은 MulticastAttribute.AttributeInheritance 또는 MulticastAttributeUsageAttribute.Inheritance, 또는 official documentation을 참조하십시오.

+0

필요한 것처럼 보이지만 OnMethodInvocation 측면에서 제대로 작동하지 않습니다. 어떤 아이디어? BTW, 귀하의 문서는 Opera 브라우저에서 매우 이상하게 작동합니다. – skevar7

+0

OnMethodInvocation은 상속에도 작동해야합니다. Reflector를 확인하여 어떤 일이 발생했는지 이해하십시오. –

+0

이 부분은 컴파일 타임 오류를 보여줍니다;) – skevar7

0

이것은 당연히 가능합니다 - 추상적 인 방법, 코드가없는 방법으로 대상 사이트 위빙을 어떻게 수행합니까? 물론 메서드를 구현하는 모든 파생 된 유형으로 대상 사이트 위빙을 수행 할 수 있지만이 경우이 유형을 제어해야합니다. 또는 메소드를 비 추상적이고 가상으로 만들 수 있으며 기본 구현을 호출하기 위해 파생 된 유형이 필요합니다.

+0

"템플릿 방법"패턴을 사용할 수있는 방법은 적어도 하나 있습니다. PostSharp는 이미이를 가상 메소드에 사용합니다. 추상적 인 방법으로도 동일한 작업을 수행 할 수 있습니다. – skevar7

+0

"[...] 추상 메소드의 사전/사후 처리를 추가하는 방법은 무엇입니까?" 코드 호출 전후에 몇 가지 단계를 수행한다는 의미입니까? 그리고 그면을 가지고 무엇을 달성하기를 원합니 까? –

+0

지정된 메서드 그룹에서 각 메서드 앞뒤에 몇 가지 코드 만 수행하면됩니다. PostSharp는 좋은 해결책으로 보였지만 추상적 인 방법에 대한 문제는 불가능합니다. – skevar7