В основном я пытаюсь реализовать какое-то аспектно-ориентированное программирование бедных людей на C#. Я думал об использовании ContextAttribute, но они кажутся только связанными на уровне класса. Есть ли способ, которым я могу поместить атрибут таким образом, чтобы он получал те же параметры, что и метод, который он комментирует, или каким-то образом доступ к контексту, в котором он запускался?Получение контекста атрибута в C#
У меня есть этот код
public void AddUser(User user)
{
var errors = DataAnnotationsValidationRunner.GetErrors(user);
if (errors.Any())
throw new RulesException(errors);
users.Add(user);
}
, из которого я хотел бы извлечь первые 3 строки, так что я должен был что-то вроде
[Validated]
public void AddUser(User user)
{
users.Add(user);
}
+1 для PostSharp –
Это идеальный вариант, я не понимал, что для C# был аспект ткача, который где-то читал, что это невозможно. Я думаю, что postharp выходит из http://zombo.com, где невозможно невозможно. – stimms
Просто FYI, посмотрите на плагины, которые поставляются с Postsharp. Я знаю, что log4postsharp (который выходит замуж за log4net и postsharp) приходит с атрибутом Log [], который будет записывать вход/выход в метод (включая отображение всех параметров, переданных в (и их значений!)). Вы можете просто переписать этот код, чтобы выполнить любую проверку. Это определенно сэкономит вам время ... –