Я только что видел сегодня Сообщение Айенде о PostSharp. Я загрузил код и попробовал его, и я подумал, что это самый крутой и простой в использовании способ обработки АОП, который я когда-либо видел.
В своем посте Айенде говорит, что PostSharp выполняет свою магию через И.Л. Ткачество. Теперь, на некотором абстрактном уровне, я могу понять, что это значит, но я хотел посмотреть, есть ли более подробный ответ. К сожалению, впервые за очень долгое время Google оказался для меня пустым. И поэтому я подумал, что это будет отличный вопрос для StackOverflow (поскольку я подписался на блог Джеффа уже пару лет и знал, что этот сайт делает свое дело).
Так что же такое IL Weaving и как это делается?





IL Weaving аналогичен ByteCode Weaving. .Net компилируется в промежуточный язык, которым управляет .NET clr. IL Weaving в основном анализирует и изменяет промежуточный язык. Поскольку это делается на этом уровне, это можно сделать для всех языков .NET.
Может помочь, если вместо этого вы используете Google MSIL Injection. Эта ссылка взята из PostSharp и хорошо ее объясняет.
Моя компания недавно купила продукт под названием dynaTrace для диагностики производительности. Он использует внедрение MSIL для инструментария методов. По сути, он добавляет код IL перед вашим методом, а затем - методом (я уверен, что это гораздо больше).
И здесь - довольно сложное, но хорошее объяснение процесса.
Ссылка резервная. Я добавил информацию об открытии.
Плетение относится к процессу внедрения функциональности в существующую программу. Концептуально это можно сделать на нескольких уровнях:
Теоретически вы могли бы пойти еще глубже и переплести исполняемый файл, скомпилированный с собственными инструкциями, но это добавило бы много сложности, и я не знаю ничего, что делает это.
Нативное "плетение" инструкций - обычное дело в родных исполняемых отладчиках. В наборе инструкций Intel x86, например, установка точки останова в коде требует вставки кода операции INT 3 в целевой код. Это перезаписывает встроенную инструкцию, поэтому вам также нужно сохранить байт, который был там, и вернуть его после срабатывания точки останова, чтобы программа работала нормально. Да, это сложно, поэтому писать отладчики - изысканное искусство.
несколько ссылок, которые я собрал по этой теме: плетение исходного кода tara.tcd.ie/handle/2262/1239; Ил плетение gutgames.com/post/Creating-an-AOP-Library-in-Net-Part-1.aspx; ByteCode переплетения eclipse.org/aspectj/doc/released/devguide/…; Аспект № developerfusion.com/article/5307/…
Обратите внимание, что в комментарии, который оставил Джерун, сообщение с gutgames.com фактически говорит о реализации АОП с использованием подклассов, а не переплетения IL.
Ваша вторая ссылка («здесь») больше не доступна, вероятно, из-за того, что соответствующая проблема была заархивирована. Вы случайно вспомнили год / месяц проблемы, о которой говорили? Заранее спасибо.