2012-03-04 2 views
1

Перейдем к деталям.Вход в приложение winform с использованием AOP и прокси

Например, у меня есть класс и логика с именем ImportAction. Этот класс имеет некоторые публичные и частные методы. Я вызываю некоторые методы. В этих методах я создаю экземпляры других классов (пропустите комментарии DI, пожалуйста, это наследие :) и вызовите некоторые методы из них (и так далее). Также у меня есть несколько частных полей в обоих классах и некоторые возвращающие значения из вызова.

Мне нужно указать все определенные значения. Я выберу всех участников.

Я прочитал об АОП и хочу использовать Unity Interception, чтобы поймать вызов. Но я не знаю, можно ли получить частное состояние метода/класса.

Я понимаю, что мне нужен прокси-сервер для всех используемых типов во время выполнения ImportAction. Также мне нужны личные поля и возвращаемые значения.

Это хороший подход для реализации этого? Может быть, это невозможно с единственными прокси? Все идеи приветствуются.

+0

Я не знаю, что вы можете сделать для частных членов, но вы можете использовать Unity, если вы хотите регистрировать вызовы методов до и после и любые переданные параметры. – Mario

ответ

0

Unity не будет напрямую предоставлять вам доступ к частному состоянию (кроме отражения).

Однако есть еще вопросы. Строго говоря, вы не можете использовать прокси-сервер, если вы создаете класс напрямую, используя new. Вы можете вручную изменить код, чтобы создать прокси-сервер, но если вы это сделаете, почему бы не просто зарегистрировать требуемую информацию? Особенно учитывая, что потребность в частном государстве, по-видимому, подразумевает, что регистрация в любом случае тесно связана с этими классами.

Однако, если вы специально хотите отделить код протоколирования от классов с помощью АОП, то вы все равно должны быть в состоянии сделать это с помощью какого-то альтернативного АОП подходы, связанные с кодом/IL переписывания, например Afterthought, PostSharp или ручной обработки с NRefactory или подобная вещь.

+0

Я не хочу писать на всем протяжении кода что-то вроде '_logger.log (" message ", typeOfMessage)'. Вот почему мне нужно более элегантное решение. –

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