2

Attribute 自体でターゲット エンティティを取得できないことは理解していますが、CodeAccessSecurityAttribute を使用する場合、関連付けられた Permission オブジェクトではどうでしょうか。Permission オブジェクトは実行時に呼び出されるため、方法があるはずですが、途方に暮れています。

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?
    }
}
4

2 に答える 2

1

コール スタックのウォークについてはどうでしょうか。少なくとも、それはあなたが熟考する必要があるものを絞り込むでしょう. System.Diagnostics.StackTraceを取得し、 GetFrameを使用して、現在の場所から 1 ステップ上のスタック フレームを取得します。

しかし、それはかなり厄介です-私の意見では、CAS属性は実際には、装飾されたものに条件を付けるべきではなく、パラメーターに設定された条件に依存する必要があります。

于 2009-05-18T05:27:56.193 に答える
0

thisさて、リフレクションを使用して、読み込まれたすべてのアセンブリをスキャンし、属性として持つクラス/メンバーを探すことができると思います。ただし、これは非常に遅いため、頻繁に実行したり、大規模なプロジェクトで実行したりする必要はありません。

于 2008-12-05T10:44:26.507 に答える