4

カスタム属性のクラス内で装飾されたクラスの型を取得することは可能ですか? 例えば:

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

次の例では、GetDecoratedClassType() は HomeView を返します。

[View]
HomeView MyHomeView { get; set; }
4

2 に答える 2

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

エレガントではないことはわかっていますが、それで十分でしょうか? (そして、おそらくモジュールのセッターをプライベートにする必要があります)

于 2010-05-20T23:28:14.700 に答える
1

この回答を参照してください。同意する傾向があります。反射の時点で、属性が適用されるメンバー情報にアクセスできる必要があります。

于 2010-05-20T23:49:19.060 に答える