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将堆栈帧从您所在的位置上移一步。

但这很讨厌——在我看来,CAS 属性真的不应该以装饰的内容为条件,而应该取决于参数中设置的条件。

于 2009-05-18T05:27:56.193 回答
0

好吧,我想你可以使用反射来扫描所有加载的程序集,寻找任何具有this属性的类/成员。但是,它会很慢,所以这不是你经常想要做的事情,或者在一个大型项目中。

于 2008-12-05T10:44:26.507 回答