2010-05-20 4 views
1

J'ai la classe suivante:C# - Silverlight - CustomAttribute avec Enum

[MetadataAttribute] 
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public class ModuleActivationButtonAttribute : ExportAttribute 
{ 
    public Enum TargetRegion { get; set; } 

    public ModuleActivationButtonAttribute(Enum targetRegion) : base(typeof(IModuleActivationButton)) 
    { 
     TargetRegion = targetRegion; 
    } 
} 

La classe compile très bien, mais quand je décore ma propriété avec elle:

[ModuleActivationButton(Regions.Tabs)] 
public IModuleActivationButton ModuleActivationButton 
{ 
    get { return new ModuleActivationButton() as IModuleActivationButton; } 
    set { ModuleActivationButton = value; } 
} 

public enum Regions 
{ 
    Content, 
    Tabs 
} 

Le compilateur recrache:

Error 1 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type C:\...\CompanyX.Modules.Home\HomeModule.cs 28 33 CompanyX.Modules.Home

+0

, la langue, et le compilateur, s'il vous plaît –

+0

Ok, je l'ai supprimé ma réponse parce que je ne suis pas convaincu ça t'aide et je n'en sais pas assez sur le MEF pour aller beaucoup plus loin. Mais vous pourriez vouloir inclure un peu plus de détails sur ce que vous essayez de faire; En regardant l'exemple d'ExportAttribute sur MSDN, je pense que vous l'utilisez peut-être mal. Il semble avoir des exportations sur les classes et des importations sur les propriétés. – pdr

+0

Selon: http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.exportattribute.aspx vous pouvez exporter sur les classes et les propriétés et les méthodes et les champs. – cmaduro

Répondre

1

Il semble que je peux encadrer l'énumération à un objet et le passer comme ça, puis unbox. Mais je peux appliquer ce que en lançant une exception si, après son interprétation n'Unbox à un Enum

[MetadataAttribute] 
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public class ModuleActivationButtonAttribute : ExportAttribute 
{ 
    public Enum TargetRegion { get; set; } 

    public ModuleActivationButtonAttribute(object targetRegion) : base(typeof(IModuleActivationButton)) 
    { 
     TargetRegion = targetRegion as Enum; 
    } 
} 
plate-forme