2013-10-21 124 views
2

應用PostSharp方面我要到處運用我VerboseTraceAspect到我的解決方案,並應用屬性除了通過集信息

  1. getter和setter方法
  2. 任何類型的TestProject.Logging.*TestProject.Tracing.*

我我正在使用下面的示例,但似乎沒有工作。我做錯了嗎?如果是這樣,應該怎麼做?

感謝堆。

[assembly: VerboseTraceAspect(AspectPriority = 0, AttributeExclude = true, AttributeTargetTypes = "TestProject.Logging.*|TestProject.Tracing.*")] 

[assembly: VerboseTraceAspect(AspectPriority = 1, AttributeExclude = true, AttributeTargetMembers = "regex:get_.*|set_.*")] 

[assembly: VerboseTraceAspect(AspectPriority = 2, AttributeTargetTypes = "TestProject.*", 
    AttributeTargetTypeAttributes = MulticastAttributes.Public, 
    AttributeTargetMemberAttributes = MulticastAttributes.Public, 
    AttributeTargetElements = MulticastTargets.Method)] 
+0

你能準確地指定似乎沒有什麼工作?該屬性是否完全不適用?它是否適用於任何地方,包括getters,setters,Logging,Tracing? – AlexD

回答

2

你需要糾正你來自哪裏TestProject.Logging.*TestProject.Tracing.*刪除您的跟蹤屬性第一行的目標類型表達。如果你想指定幾個用管道分開的選項,那麼你應該使用正則表達式語法。

你還需要使用AttributePriority而不是AspectPriority財產。該AspectPriority有任何影響之前執行的屬性多播。稍後用它來確定您的方面將執行的順序。

「排除」屬性必須具有更高的優先級值(較高的值是較低的值之後處理)。

[assembly: VerboseTraceAspect(
    AttributePriority = 1, 
    AttributeExclude = true, 
    AttributeTargetTypes = @"regex:TestProject\.Logging\..+|TestProject\.Tracing\..+")] 

[assembly: VerboseTraceAspect(
    AttributePriority = 2, 
    AttributeExclude = true, 
    AttributeTargetMembers = "regex:get_.*|set_.*")] 

[assembly: VerboseTraceAspect(
    AttributePriority = 0, 
    AttributeTargetTypes = "TestProject.*", 
    AttributeTargetTypeAttributes = MulticastAttributes.Public, 
    AttributeTargetMemberAttributes = MulticastAttributes.Public, 
    AttributeTargetElements = MulticastTargets.Method)] 
+0

嗨亞歷克斯感謝您的回覆。我將如何處理擴展方法?我已經添加了一個Method to System.Type,我想排除它。 – PatrickNolan

+0

嗨有人沒有如何處理擴展方法? – PatrickNolan

+1

只需處理它與正常的靜態方法。例如,如果是在一個名爲'MyExtensionMethods'靜態類,那麼這就是你想從組播排除類。 – AlexD