2010-03-24 66 views
3

我正在使用postsharp 1.5和OnMethodBoundaryAspect工作。 我希望我的一個環節都有以下行爲默認:PostSharp OnMethodBoundaryAspect

1 - 如果屬性是在類級別使用方面僅在公共方法應用。

2 - 方面的用戶可以將方面放在私有或受保護的方法中。

如果使用此 [MulticastAttributeUsage( MulticastTargets.Method,TargetMemberAttributes = MulticastAttributes.Public)] 點1級的作品,但殼體2甚至不建立becaue是不相容的。

然後我試着用: AttributeTargetTypeAttributes = MulticastAttributes.Public; 在方面的構造函數中,但不起作用。

非常感謝您提前。

回答

5

不幸的是,沒有辦法使用SINGLE方面的類實現您的需求。

您可以使用三個方面的類:

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

謝謝蓋爾,我會遵循這個方法。 – 2010-03-24 13:21:21

0

另一種可能的方法是使用IAspectProvider,動態地提供方面。

用於創建此方面的示例,爲常規方法和構造函數注入不同方面可以在有關Aspect Providers的PostSharp培訓中找到。

在你的情況下,你可以使用提供的樣本,並根據'ReflectedType.IsPublic'條件決定你想注入哪個方面。

+1

我知道原來的問題發佈了〜2年前,但我只是有同樣的問題,並發現這種方法更適合我的需求。 – avivr 2012-04-24 07:50:27