【发布时间】:2012-03-23 14:54:53
【问题描述】:
假设我有一个属性类:
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 在该上下文中不可用。
【问题讨论】:
-
在编织发生的时候,会有 0 个类的instances - 你的属性与一个类相关联,not有一个类的实例。
-
如果使用 PostSharp,那么您将按照@Gael Fraiteur 的建议进行操作。
标签: c# aop custom-attributes postsharp