Там должен так или иначе прервать вызов метода класса, таким образом, можно сделать AOP?
например.
Я хочу Учителя. Разговор () работает по-другому в двух сценариях:
class School
{
[Fun]
public void Picnic {
Teacher t = new Teacher();
t.Talk();
}
public void Seminar{
Teacher t = new Teacher();
t.Talk();
}
}
В вышеупомянутом коде функциональный Пикник украшен Забавным атрибутом, таким образом, функция Разговора учителя намного более интересна, чем тот в функции Семинара, которая не украшена атрибутом.
Я проверил Замок. DynamicProxy, но это использует прокси-класс, и нуждаются в некоторой модификации кода. Это не помогает решить мою проблему, потому что я хочу использовать атрибут для реализации конфигурации, так, чтобы, когда решение изменяется, очень немного модификаций кода были необходимы.
Большое спасибо заранее!
Существует два основных подхода: создание прокси подкласса или изменение кода, также известное как «переплетение во время компиляции», чтобы ввести ловушки в скомпилированную сборку.
Создание подклассов позволяет вам перехватывать только виртуальные методы и конструкторы, в то время как плетение во время компиляции может вводить ловушки где угодно для перехвата вызовов в базе кода.
После исследования той же проблемы несколько месяцев назад, единственным достойным решением, которое я нашел, было использование PostSharp. http://www.sharpcrafters.com/
Даже это не идеально, потому что отключает Edit/Continue в классах, использующих атрибуты (плюс-минус).