【问题标题】:Get multiple attributes of the same type in the MetadataProvider在 MetadataProvider 中获取多个相同类型的属性
【发布时间】:2016-09-03 10:18:59
【问题描述】:

我有一个属性,它有AllowMultiple:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class AllowedDeviceTypesAttribute : System.Attribute
{
    //...
}

我在我的财产上多次使用它:

[AllowedDeviceTypes(DeviceTypes.StaticRegister)]
[AllowedDeviceTypes(DeviceTypes.MobileRegister)]
public int ClientNr { get; set; }

我有一个自定义模型元数据提供者:

public class ExtendedModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
    protected override ModelMetadata CreateMetadata(IEnumerable<System.Attribute> attributes, Type containerType, Func<object> modelAccessor, Type modelType, string propertyName)
    {
        var attributeList = attributes as IList<System.Attribute> ?? attributes.ToList();
        var data = base.CreateMetadata(attributeList, containerType, modelAccessor, modelType, propertyName);
        //...
        var allowedDeviceTypesAttributes = attributeList.Where(a => typeof(AllowedDeviceTypesAttribute) == a.GetType()).ToList();
        if (allowedDeviceTypesAttributes.Count > 0)
        {
            var allowedDeviceTypes = allowedDeviceTypesAttributes.Cast<AllowedDeviceTypesAttribute>().Select(e => e.AllowedDeviceType).ToList();
            data.AdditionalValues.Add(AllowedDeviceTypesAttribute.AdditionalMetaDataValue, allowedDeviceTypes);
        }

        return data;
    }
}

我的问题是,我在attributes 中总是只有一个AllowedDeviceTypesAttribute

如何获得这两个属性?

[AllowedDeviceTypes(DeviceTypes.StaticRegister)]
[AllowedDeviceTypes(DeviceTypes.MobileRegister)]

【问题讨论】:

    标签: c# asp.net-mvc metadata custom-attributes


    【解决方案1】:

    要完成这项工作,我们需要覆盖TypeId 属性:

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
    public class AllowedDeviceTypesAttribute : System.Attribute
    {
        //...
        public override object TypeId
        {
            get
            {
                return this;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多