2011-12-21 2 views
2

Итак, у меня есть сборка .net в C#. У меня есть оба: двоичный и источник, который, например, не имеет регистратора. Все, что мне нужно, это вставить свойство, которое будет инициализировано конкретным регистратором. Затем мне нужно ввести logger invoker во все методы. Первый способ - это свойство записи вручную и их вызов. Второй способ - написать другой класс \ метод (предположим, в той же сборке), который будет делать это автоматически.Как программно вставить код в сборку

Возможно ли это? Какие-либо предложения?

Я думаю, что это возможно, потому что это был один из вопросов на собеседовании. Но нет доказательств того, что это возможно, и они хотели услышать «нет, сделайте это вручную».

+4

http://en.wikipedia.org/wiki/Aspect-oriented_programming –

ответ

2

Это то, что мы называем архитектурными терминами «перекрестная озабоченность». Ведение журнала - это то, что охватывает многие аспекты приложения.

Есть функции по уходу за ним в Microsoft Enterprise Library. Часть, которую вы хотите, это библиотека Policy Injection. Затем вы можете указать в настройках методы для сопоставления (на основе имени/структуры метода) и функции, подлежащей вызову. Таким образом, вы можете включить ведение журнала как надлежащую сквозную проблему вашего приложения, а не то, что должно быть вручную закодировано в каждом методе.

0

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

Таким образом, ответ на их вопрос 1. возможен, 2. невозможно, и если вам нужно добавить поддержку ведения журнала, вам нужно будет добавить его к каждому методу вручную.

+0

Это можно сделать без добавления его к каждому методу вручную с помощью раздела «Инъекция политики» в Microsoft Enterprise Library: http://msdn.microsoft .com/EN-US/библиотека/ff647463.aspx –

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