我正在尝试创建一个显示属性CountryText
的值的自定义属性[DisplayNameProperty("CountryText")]
public string Country { get; set; }
public string CountryText { get; set; }
这是属性的代码
namespace Registration.Front.Web.Validators
{
public class RegistrationDisplayNameAttribute:DisplayNameAttribute
{
private readonly PropertyInfo _proprtyInfo;
public RegistrationDisplayNameAttribute(string resourceKey):base(resourceKey)
{
}
public override string DisplayName
{
get
{
if(_proprtyInfo==null)
}
}
}
}
如何在我的属性代码中进行反射以获取名为resourceKey
的fild的值?
答案 0 :(得分:-1)
由于无法通过构造函数将实例传递给属性,(即属性在编译时包含在元数据中,然后通过反射使用,您可以看到Pass instance of Class as parameter to Attribute constructor)
有一个工作arround来传递实例,那就是在构造函数中这样做:
public class Foo
{
[RegistrationDisplayNameAttribute("MyProp2")]
public string MyProp { get; set; }
public string MyProp2 { get; set; }
public Foo()
{
var atts = this.GetType().GetCustomAttributes();
foreach (var item in atts)
{
if (atts is RegistrationDisplayNameAttribute)
{
((RegistrationDisplayNameAttribute)atts).Instance = this;
}
}
}
}
并在DisplayName中执行:
public override string DisplayName
{
get
{
var property = Instance.GetType().GetProperty(DisplayNameValue);
return property.GetValue(Instance, null) as string;
}
}
我不推荐这样的方法:(