Атрибуты не предназначены для функциональной роли. Вам нужно написать код, используя отражение где-нибудь в вашем проекте, который читает метаданные типов классов [и реквизита, методы и т. Д.] И находит применимые к нему атрибуты. Основываясь на применяемых атрибутах, вы можете принимать решения во время выполнения о том, что с этим делать. Как правило, это делается в базовых классах вашей библиотеки.
В качестве примера в наших проектах мы имеем атрибут под названием «Поиск». Этот атрибут применяется к свойствам бизнес-объектов, которые необходимо включить в поиск. Когда клиент вызывает метод поиска, мы отфильтровываем все реквизиты, украшенные атрибутом Searchable, а затем создаем запрос для поиска в базе данных. Практически у нас нет кода, связанного с функциональностью поиска в классе SearchableAttribute - на самом деле в классе SearchableAttribute кода вообще нет.
Пример кода:
SearchableAttribute
/// <summary>
/// Holds mapping information of searchable fields of business objects.
/// </summary>
[global::System.AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)]
public sealed class SearchableAttribute : Attribute
{
/// <summary>
/// Initializes a new instance of the SearchableAttributeAttribute class.
/// </summary>
public SearchableAttribute()
{
}
}
Способ бизнес-объекта базового класса
/// <summary>
/// Provides collection of all Searchable Fields.
/// </summary>
/// <returns>DataField collection</returns>
public IQueryable<DataField> GetSearchableDataFields()
{
PropertyInfo[] properties =
this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
var entityFields = from PropertyInfo property in properties
where property.GetCustomAttributes(typeof(SearchableAttribute), true).Length > 0
select
new DataField(
property,
(SearchableAttribute)property.GetCustomAttributes(typeof(SearchableAttribute), true)[0]);
return entityFields.AsQueryable();
}
У вас есть пример этого? – LiamB
код добавлен :) :) –
Ваш ответ правильный за пределами ASP.NET MVC; Однако фильтры действия ASP.NET MVC являются особым видом атрибута. Они выполняются как часть конвейера MVC и позволяют обрабатывать определенные события. http://www.asp.net/learn/mvc/tutorial-14-cs.aspx. Ваш ответ неверен в контексте ASP.NET MVC. –