1

我正在尝试创建属性,该属性将为类范围内的每个对象生成标识号键。所以我需要知道哪个类包含与属性相关的参数。我创建了这样的东西:

class SampleModel
{
    [Identity(typeof(SampleModel))]
    public int Id { get; set; }
}


public class IdentityAttribute : Attribute
{
    private readonly int _step;
    private readonly Type _objectType;

    public IdentityAttribute(Type type)
    {
        _step = 1;
        _objectType = type;
    }

    public object GenerateValue()
    {
        return IdentityGenerator.GetGenerator(_objectType).GetNextNum(_step);
    }
}

但我想知道是否有任何方法可以让我在 IdentityAttribute 构造函数中获取基类的类型(在本例中为 SampleMethod)而不将其作为参数发送?

4

1 回答 1

1

没有这样的方法—— 的一个实例Attribute不知道它在装饰什么。

但是创建实例的代码确实如此,因此根据使用情况,您可以在外部注入此信息:

 var identityAttribute = (IdentityAttribute)Attribute.GetCustomAttribute(...);

 // If you can call GetCustomAttribute successfully then you can also easily
 // find which class defines the decorated property
 var baseClass = ... ;

 // And pass this information to GenerateValue
 var value = identityAttribute.GenerateValue(baseClass);
于 2013-07-06T13:55:26.583 回答