0

我正在尝试创建一个自定义属性来显示属性 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在我的属性代码中命名的字段的值?

4

1 回答 1

-1

由于无法通过构造函数将实例传递给属性,(即属性在编译时包含在元数据中,然后通过反射使用,您可以看到将类的实例作为参数传递给属性构造函数

有一个方法可以传递实例,那就是在构造函数中这样做:

  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;
  }

}

我不推荐这种方法:(

于 2013-07-24T09:24:58.710 回答