Как прервать вызов метода класса

Там должен так или иначе прервать вызов метода класса, таким образом, можно сделать AOP?

например.

Я хочу Учителя. Разговор () работает по-другому в двух сценариях:

class School
{
    [Fun]
    public void Picnic {
        Teacher t = new Teacher();
        t.Talk();
    }

    public void Seminar{
        Teacher t = new Teacher();
        t.Talk();
    }
}

В вышеупомянутом коде функциональный Пикник украшен Забавным атрибутом, таким образом, функция Разговора учителя намного более интересна, чем тот в функции Семинара, которая не украшена атрибутом.

Я проверил Замок. DynamicProxy, но это использует прокси-класс, и нуждаются в некоторой модификации кода. Это не помогает решить мою проблему, потому что я хочу использовать атрибут для реализации конфигурации, так, чтобы, когда решение изменяется, очень немного модификаций кода были необходимы.

Большое спасибо заранее!

1
задан Roy 4 August 2010 в 05:45
поделиться

2 ответа

Существует два основных подхода: создание прокси подкласса или изменение кода, также известное как «переплетение во время компиляции», чтобы ввести ловушки в скомпилированную сборку.

Создание подклассов позволяет вам перехватывать только виртуальные методы и конструкторы, в то время как плетение во время компиляции может вводить ловушки где угодно для перехвата вызовов в базе кода.

1
ответ дан 2 September 2019 в 22:31
поделиться

После исследования той же проблемы несколько месяцев назад, единственным достойным решением, которое я нашел, было использование PostSharp. http://www.sharpcrafters.com/

Даже это не идеально, потому что отключает Edit/Continue в классах, использующих атрибуты (плюс-минус).

1
ответ дан 2 September 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: