Мне нужно знать, есть ли какой-либо способ (или другой отличный подход) к атрибуту, который знает что-то о том, что его украшает. Например:
class Cat
{
public Cat() { }
[MyAttribute]
public House House { get; set; }
}
Внутри MyAttribute
Я должен выполнить некоторую предварительную обработку с домашним объектом...
class MyAttribute : Attribute
{
public MyAttribute()
{
var ob = // Discover the decorated property, do some changes and set it again
}
}
Я не знаю, лучше ли это, и если это действительно возможно,
Это не так, как работают атрибуты. Они просто добавляют метаданные времени компиляции к чему-то. Они ничего не выполняют сами по себе. Во время выполнения код может использовать эти метаданные для выполнения действий.
ОБНОВЛЕНИЕ: В принципе, как я понимаю, вы пытаетесь выполнить две вещи. Первое - сообщить репозиторию, что он не загружает некоторые свойства. Атрибуты могут использоваться для этой цели, но код репозитория должен использовать отражение в типе сущности и видеть, что он не должен загружать в первую очередь. Во-вторых, вы хотите, чтобы свойство было загружено так, как оно было вызвано в первый раз. Вам нужно проверить, загружен ли он уже на каждом вызове и загружать его при первом вызове. Это может быть достигнуто путем ручной вставки такого кода или использования чего-то вроде PostSharp, который обрабатывает код и может автоматически вводить вызовы методов, просматривая по атрибутам. Наверное, это то, о чем вы просили в первую очередь.
В EntLib вам понадобится блок приложения Injection Policy.
Разработчики могут использовать Политику Блок приложений для инъекций, чтобы указать сквозное поведение объектов в условия набора политик. Политика представляет собой комбинацию ряда обработчики, выполняющие код клиента вызывает методы класса и-с исключение атрибутов политики - ряд совпадающих правил которые выбирают классы и класс членов (методы и свойства) который прикрепляет блок приложения обработчики.