将属性属性设置为已修饰类的类型

时间:2010-05-20 23:18:23

标签: c# custom-attributes

是否可以在自定义属性类中获取装饰类的类型? 例如:

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = false)]
public class ViewAttribute : ExportAttribute
{

    public object TargetRegion { get; set; }
    public Type ViewModel { get; set; }
    public Type Module { get; set; }

    public ViewAttribute()
        : base(typeof(UserControl))
    {
        Module = GetDecoratedClassType(); //I need this method
    }
}

在以下示例中,GetDecorated Class Type()将返回HomeView

[View]
HomeView MyHomeView { get; set; }

2 个答案:

答案 0 :(得分:3)

你不能在构造函数中将它添加为参数吗?

public class ViewAttribute : ExportAttribute
{    
    public object TargetRegion { get; set; }
    public Type ViewModel { get; set; }
    public Type Module { get; set; }

    public ViewAttribute(Type decoratedClassType)
        : base(typeof(UserControl))
    {
        Module = decoratedClassType
    }
}

[View(typeof(HomeView))]
HomeView MyHomeView { get; set; }

我知道它不是很优雅,但这样就足够了吗? (你应该把模块私有的setter)

答案 1 :(得分:1)

看到这个answer,我倾向于同意,在反思时你应该有权访问属性所适用的成员信息。