2010-05-20 68 views
1

我有下面的类:C# - Silverlight的 - CustomAttribute与枚举

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

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

类编译罚款,但是当我装修我的财产与它:

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

public enum Regions 
{ 
    Content, 
    Tabs 
} 

编译器吐出:

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

平台,语言和编译器抛出一个异常强制执行此,请 – 2010-05-20 17:41:29

+0

好吧,我删除了我的反应,因为我不相信它可以帮助你,我对MEF的进一步了解还不够。但是你可能想要包含更多关于你想要做什么的细节;在MSDN上查看ExportAttribute的例子,我想你可能会错误地使用它。它似乎有类上的导出和属性上的导入。 – pdr 2010-05-20 18:39:20

+0

根据: http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.exportattribute.aspx您可以导出类和属性以及方法和字段。 – cmaduro 2010-05-20 21:40:41

回答

1

看来我可以将枚举对象放入一个对象中,然后将它作为对象传递,然后unbox。但后来我只能如经解释它没有拆箱,以枚举

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