метод расширения для метода C # - PullRequest
5 голосов
/ 08 октября 2010

Есть ли способ иметь метод расширения для метода?Примером этого может служить метод, который принимает некоторый пользовательский объект в качестве параметра, и вам необходимо проверить безопасность, может ли этот пользователь использовать этот метод в самом начале метода.Может ли метод иметь метод расширения типа «проверьте, может ли этот пользователь использовать меня» и вернет bool.

Спасибо.

Ответы [ 6 ]

7 голосов
/ 08 октября 2010

Вы можете использовать Аспектно-ориентированное программирование (AOP) для реализации сквозных проверок безопасности в вашем коде.

В .NET у вас есть выбор из нескольких AOP-фреймворков, например:

В частности, в документации PostSharp есть несколько хороших примеров того, как реализовать защиту с использованием AOP .

3 голосов
/ 08 октября 2010

Вы не можете добавить метод расширения для метода с C #.

Но вы можете использовать Аспектно-ориентированное программирование (AOP) , чтобы делать то, что вы хотите, например, используя PostSharp или Spring.NET .

0 голосов
/ 08 октября 2010

Вы можете пойти с ответом madgnome, который основан на аспектном программировании (рад видеть, что кто-то использовал это в .net), или вы можете использовать атрибуты и вставить некоторый код в каждый метод, который должен быть защищен.

0 голосов
/ 08 октября 2010

Методы расширения в C # - это не расширения методов (я не уверен, что я понимаю, что это значит), а методы, расширяющие объекты / классы.

Если вы хотите внедрить видпроверки, которые вы описываете в своем коде, вы можете посмотреть в PostSharp и AOP .

0 голосов
/ 08 октября 2010

Я не уверен, хорошо ли я понимаю ваш вопрос. Однако, что по этому поводу:

public static void EnsureUserHasAccess(this object obj)
{
    // check permissions, possibly depending on `obj`'s actual type
}

public static void DoSomething(this MyClass obj)
{
    // permissions check
    obj.EnsureUserHasAccess();

    // do something about `obj`
    …
}

public static void DoSomethingElse(this MyDifferentClass obj)
{
    // permissions check
    obj.EnsureUserHasAccess();

    // do something about `obj`
    …
}
0 голосов
/ 08 октября 2010

Я не совсем уверен, что вы ищете, но это пахнет декларативной безопасностью для меня.

Взгляните на: http://msdn.microsoft.com/en-us/library/kaacwy28.aspx

...