2008-11-11 50 views
2

我意識到您無法在屬性本身中獲取目標實體,但在使用CodeAccessSecurityAttribute時關聯的Permission對象又如何? Permission對象在運行時被調用,所以看起來應該有一種方法,但我很茫然。檢索CodeAccessSecurityAttribute中的目標元素

public sealed class MySecurityAttribute : CodeAccessSecurityAttribute 
{ 
    public override IPermission CreatePermission() 
    { 
     MySecurityPermission permission = new MySecurityPermission(); 

     //set its properties 
     permission.Name = this.Name; 
     permission.Unrestricted = this.Unrestricted; 
     return permission; 
    } 

} 

public class MySecurityPermission : IPermission, IUnrestrictedPermission 
{ 

    public MySecurityPermission(PermissionState state) 
    { 
      // what method was the attribute decorating that 
      // created this MySecurityPermission? 
    } 

    public void Demand() 
    { 
      // Or here? 
    } 
} 

回答

0

好吧,我想你可以使用反射遍歷所有加載的程序集掃描,尋找任何類/構件,其具有this作爲一個屬性。不過,這會很慢,所以這不是你想要經常做的事情,也不是一個大型項目。

+0

是的,這是唯一的解決方案,我可以拿出來,但反射並不是一個項目的大小和頻率它需要發生的選項。感謝您的反饋。 – Mike 2008-12-10 16:07:06

1

怎麼樣走動調用堆棧?至少這會縮小你需要反思的東西。抓住System.Diagnostics.StackTrace並使用GetFrame從您所在的位置向上移動堆棧框架。

雖然它的確很討厭 - 在我看來,CAS的屬性不應該取決於裝飾的內容,而應該取決於參數中設置的條件。