Lo usamos para definir qué diseñador gráfico debe cargarse para configurar una instancia de un tipo específico.
Es decir, tenemos un tipo de diseñador de flujo de trabajo que carga todos los tipos de comandos de un ensamblaje. Estos tipos de comando tienen propiedades que deben configurarse, , por lo que cada tipo de comando necesita un diseñador diferente (usercontrol).
Por ejemplo, consideremos el siguiente tipo de comando (llamado un compuesto en el que nuestra solución)
[CompositeMetaData("Delay","Sets the delay between commands",1)]
[CompositeDesigner(typeof(DelayCompositeDesigner))]
public class DelayComposite : CompositeBase
{
// code here
}
Esta es la información se utiliza en dos lugares
1) Cuando el diseñador crea una lista de comandos, usa CompositeMetaData para mostrar más información sobre el comando.
2) Cuando el usuario añade un comando para el diseñador y el diseñador crea una instancia de esa clase, se ve en la propiedad CompositeDesigner, crea una nueva instancia del tipo especificado (usercontrol) y lo añade a el diseñador visual.
considere el siguiente código, se utiliza para cargar los comandos en nuestra "barra de herramientas":
Como se puede ver, para cada tipo en la asamblea de la cual el nombre termina con "Compuesto", obtenemos los atributos personalizados y usamos esa información para completar nuestra instancia de ToolboxListItem.
En cuanto a la carga del diseñador, el atributo es retreived así:
var designerAttribute = (CompositeDesignerAttribute)item.CompositType.GetCustomAttributes(false)
.Where(a => a.GetType() == typeof(CompositeDesignerAttribute)).FirstOrDefault();
Este es sólo un ejemplo de cómo puede ser capaz de utilizar los atributos personalizados,
Espero que esto te un da lugar para comenzar.
También se usan en el diseñador de Visual Studio. –
Y es importante tener en cuenta que son sólo sugerencias: todavía tiene que establecer el valor predeterminado de MyPoperty en 100 en el código, por ejemplo, o terminará mintiendo al consumidor de su propiedad. –