我正在尝试创建属性,该属性将为类范围中的每个对象生成标识号键。所以我需要知道哪个类包含与属性相关的参数。 我创造了这样的东西:
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)而不将其作为参数发送?
答案 0 :(得分: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);