gpt4 book ai didi

c# - 属性类如何引用使用它的实例?

转载 作者:行者123 更新时间:2023-12-02 00:38:04 24 4
gpt4 key购买 nike

假设我有一个属性类:

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 在该上下文中不可用。

最佳答案

你应该这样做:

public class TrackDirtyPropertyAttribute : OnMethodBoundaryAspect 
{
public override void OnSuccess(MethodExecutionArgs args)
{
((BaseModel) args.Instance).IsDirty = true;
}
}

关于c# - 属性类如何引用使用它的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9841386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com