2015-12-29 21 views
1

我有一個方面,通常使用Postsharp構建的緩存。 我的問題是,當PostSharp編織的代碼,結果代碼不會對方法的屬性了,這是有道理的,有幾個原因:使用PostSharp在方法中添加屬性

  1. 它已不再有用,因爲它的目的對於PostSharp
  2. 它可以在組件級應用並沒有[CacheAttribute]受影響的方法與

但開始..我試圖做一些單元測試,我想看看屬性在結果代碼,所以我可以說: 「檢查方法x是否有一個緩存屬性說它應該緩存50秒「。這將是我所有的單元測試,而不是每次都嘲笑緩存管理器。該方面適用於我想要的許多方法,並且我可以單獨測試方面,只通過檢查屬性來檢查是否應用了緩存。

那麼,我怎麼能說Postharp在受影響的方法上編織屬性,這與用於編織代碼的CacheAttribute相同?好的,它可以是其他屬性,因此它們不會發生衝突,但必須具有CacheAttribute的屬性。

http://www.postsharp.net/blog/post/PostSharp-Principals-Day-12-e28093-Aspect-Providers-e28093-Part-1 - 它告訴我如何在字段和屬性上添加屬性,但不在方法上添加屬性。

乾杯。

回答

0

我找到了解決方案,沒有必要自己添加一個新的屬性。 Postharp通過讓您添加PersistMetadata - 對於多播屬性爲true來解決此問題:

[MulticastAttributeUsage(PersistMetaData = true)] 
public class CacheAttribute : MethodInterceptionAspect 
{...} 

神奇地工作。