2016-06-10 3 views
1

Я новичок в AOP и PostSharp. Я пытаюсь применить аспект к предопределенному классу, например, к классу System.Windows.Forms.Button и перехватить некоторые его методы. Можете ли вы посоветовать мне, как это сделать с PostSharp? Можем ли мы использовать PostSharp для захвата события, полученного из данного типа UIElement?Как применить аспект к предопределенному классу?

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

ответ

0

Я сомневаюсь, что это возможно, так как я не думаю, что шаг ilwaving of postsharp может манипулировать уже скомпилированными внешними dll.

Что вы можете сделать, это реализовать собственную кнопку (простираться от кнопки) и имеют те методы перехвачены

+0

Это неэффективно, так как я должен обернуть все элементы пользовательского интерфейса только для того, чтобы захватить их события :( –

+0

Для событий, что вы хотите сделать? Не работал бы обычный обработчик событий? – Batavia

+0

Я просто хочу знать, когда нажмите кнопку, для всех кнопок в программе. –

1

MethodInterceptionAspect работает на методах, объявленных во внешних библиотеках путем перехвата вызова на месте вызова. Это означает, что сам метод не преобразуется, и вместо этого место, где вы вызываете метод, изменяется. Оригинальная сборка не преобразуется.

Вы можете сделать это многоадресным атрибут на сборке и явное указание AttributeTargetAssemblies:

[assembly:MyAspect(AttributeTargetAssemblies="myassembly,...", AttributeTargetTypes="...", AttributeTargetMembers="..."] 

Это подразумевает некоторые ограничения. Например, если код вызывается из внешнего кода, вызов не будет перехвачен. В вашем случае вы можете использовать это для перехвата метода, который всегда вызывается из кода дизайнера (например, this.Controls.Add(...)).

В случае кнопок в исходном коде, я думаю, что будет другой жизнеспособный подход. Если вы создаете LocationInterceptionAspect и многоадресную рассылку по всем полям типа Button, вы сможете перехватить создание всех кнопок в вашем приложении. В коде аспекта (set handler) вы можете зарегистрироваться на событие Clicked этих кнопок.

Смежные вопросы