Допустим, у меня есть класс атрибута:
public class MyCustomAttribute : Attribute
{
// do stuff
}
И я использую этот атрибут в свойствах класса:
public class MyModel : BaseModel
{
[MyCustom]
public string Name { get; set; }
}
Есть ли способ в коде MyCustomAttribute
ссылаться на экземпляр MyModel
, на котором он используется?
В конечном итоге я просто экспериментирую с AOP (используя PostSharp), чтобы создать атрибуты для отслеживания, когда модель загрязнена. Так что если BaseModel
имеет свойство IsDirty
, я бы хотел сделать что-то подобное с PostSharp:
public class TrackDirtyPropertyAttribute : OnMethodBoundaryAspect
{
public override void OnSuccess(MethodExecutionArgs args)
{
someReferenceToTheObject.IsDirty = true;
}
}
Я пытался передать ссылку в конструктор атрибута:
public class TrackDirtyPropertyAttribute : OnMethodBoundaryAspect
{
private BaseModel _currentObject { get; set; }
public TrackDirtyPropertyAttribute(BaseModel currentObject)
{
_currentObject = currentObject;
}
public override void OnSuccess(MethodExecutionArgs args)
{
_currentObject.IsDirty = true;
}
}
Однако, когда я использую это:
[TrackDirtyProperty(this)]
public string Name { get; set; }
Он говорит мне, что this
недоступен в этом контексте.