Иногда я использую атрибуты для украшения классов или методов и использую отражение для получения «приписанных» данных.
Может быть, это немного сложно объяснить, но последнее, для чего я использовал атрибуты, это система, в которой у меня есть пара сущностей в базе данных.
Каждая сущность имеет своего рода «код», и каждая сущность также может иметь некоторые правила интерпретации.
В моем проекте у меня есть один класс сущностей, который представляет сущность, существующую в базе данных, и у меня также есть набор классов «Правило».
Один класс правил содержит логику интерпретации данного объекта.
Чтобы «связать» определенное «Правило» (интерпретацию) с конкретным экземпляром моей сущности, я создал собственный Атрибут.
Я украшаю свой класс «Правило» этим атрибутом, и через атрибут я определяю, для какого объекта это Правило.
Затем, когда я загружаю сущность из БД, я вставляю правильное правило в эту сущность.
Немного кода, чтобы прояснить ситуацию:
public class MyEntity
{
public string Code
{
get;
private set;
}
public bool IsValidFor( ... )
{
IRule rule = RuleRegistry.GetRuleFor(this);
if( rule.IsValid() ) ...
}
}
[RuleAttrib("100")]
public class MyRule : IRule
{
public bool IsValid()
{
}
}
Это всего лишь маленький пример, но я думаю, что вы поймаете дрейф.
Атрибут RuleAttrib в классе MyRule говорит о том, что это правило следует применять к экземпляру MyClass, который имеет код «100».
Экземпляр RuleRegistry может извлечь правильный IRule для текущего объекта (используя отражение).
Другим примером, где я использовал атрибуты в сочетании с Postsharp, является реализация системы «блокировки»:
http://fgheysels.blogspot.com/2008/08/locking-system-with-aspect-oriented.html