2010-05-20 203 views
2

是否可以在裝飾類屬性的類中獲取裝飾類的類型? 例如:將屬性屬性設置爲裝飾類的類型

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

回答

1

看到這個answer,我傾向於同意,在反思點你應該有權訪問該屬性應用到的成員信息。

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)

+0

私人二傳手仍然可以通過反射訪問。爲了避免這種情況,你可以使用'readonly'後臺字段來使'Module'成爲'getter only'屬性...... – takrl 2012-08-29 14:37:18