Получить целевой элемент в CodeAccessSecurityAttribute - PullRequest
2 голосов
/ 11 ноября 2008

Я понимаю, что вы не можете получить целевой объект в самом Атрибуте, но как насчет связанного объекта Разрешения при использовании CodeAccessSecurityAttribute? Объект 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?
    }
}

Ответы [ 2 ]

1 голос
/ 18 мая 2009

Как насчет обхода стека вызовов? По крайней мере, это сузит то, что вам нужно отразить. Возьмите System.Diagnostics.StackTrace и используйте GetFrame , чтобы получить кадр стека на один шаг вверх от того места, где вы находитесь.

Хотя это довольно неприятно - атрибуты CAS действительно, на мой взгляд, не должны зависеть от того, что было оформлено, скорее они должны зависеть от условий, установленных в их параметрах.

0 голосов
/ 05 декабря 2008

Ну, я думаю, вы могли бы использовать отражение для сканирования всех загруженных сборок, ища любой класс / член, который имеет this в качестве атрибута. Однако это будет довольно медленно, поэтому вам не захочется делать это часто или в большом проекте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...