我意识到你无法在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?
}
}
答案 0 :(得分:1)
走私电话堆栈怎么样?至少这会缩小你需要反思的范围。抓住System.Diagnostics.StackTrace并使用GetFrame将堆栈框架从您所在的位置提升一步。
虽然这是相当讨厌的 - 在我看来,CAS属性确实不应该取决于装饰的内容,而应该取决于它们参数中设置的条件。
答案 1 :(得分:0)
好吧,我猜你可以使用反射来扫描所有已加载的程序集,查找任何以this
作为属性的类/成员。但是,它会很慢,所以这不是你想经常做的事情,也不是大项目。