TypeDescriptor.AddAttributes () sustituye a la insead atributo actual de agregarlo
-
10-10-2019 - |
Pregunta
Tengo esta porción de código:
var hasAttribute = TypeDescriptor.GetAttributes(property.DeclaringType).OfType<CrmTypeAttribute>()
.Any((attr)
=> ((CrmTypeAttribute)attr).Name == property.Name);
if (!hasAttribute)
{
var crmTypeAttribute = new CrmTypeAttribute(property.Name, crmType);
TypeDescriptor.AddAttributes(property.DeclaringType, crmTypeAttribute);
}
Tiene dos problemas:
- Por alguna razón OfType devuelve un IEnumerable vacía aunque debe devolver los atributos adecuados de ese tipo, y he comprobado. Ellos existen.
- Este es el problema grave. En lugar de añadir el atributo al que sustituye el antiguo atributo del mismo tipo con crmTypeAttribute. He marcado allowMultiple para ser verdad.
Puede alguien decirme lo que está mal con este código?
EDIT:
Por alguna razón que permite agregar sólo un atributo de un tipo de atributo, he añadido otro tipo de atributo en tiempo de ejecución y ha funcionado.
Solución 2
Resulta que las necesidades de atributos para anular la propiedad TypeId de la clase de atributo y no deben tratarse como duplicado.
Ver aquí para los detalles, es muy oculto y debe mencionarse en GetAttributes como bien.
Otros consejos
Creo que su problema se deriva del hecho de que usted está haciendo caso omiso de la TypeDescriptionProvider
regresar de la llamada AddAttributes
.
Desde el reflector TypeDescriptor.AddAttributes
:
atributos agrega la clase a nivel de la orientar tipo de componente.
Parámetros
type :. El
Type
del componente de destinoAtributos . Una serie de objetos
Attribute
añadir a la clase del componenteValor de retorno . El
TypeDescriptionProvider
de nueva creación que se utiliza para agregar los atributos especificados
Siempre hay una nueva instancia creada TypeDescriptionProvider
cuando se llama a este método estático. Usted debe confiar en este caso el proveedor recién creado al añadir nuevos atributos y también la consulta de atributos añadidos recientemente.