2010-03-25 163 views
0

是否有幫助我任何與此框架:(想,也許StructureMap可以幫我)填充性能飾有一個屬性

每當我創建「MyClass的」的新實例或從IMyInterface的繼承其他類我希望所有使用[MyPropertyAttribute]裝飾的屬性都使用屬性中的屬性Name來填充來自數據庫或某些其他數據存儲的值。

public class MyClass : IMyInterface 
{ 
    [MyPropertyAttribute("foo")] 
    public string Foo { get; set; } 
} 

[AttributeUsage(AttributeTargets.Property)] 
public sealed class MyPropertyAttribute : System.Attribute 
{ 
    public string Name 
    { 
     get; 
     private set; 
    } 

    public MyPropertyAttribute(string name) 
    { 
     Name = name; 
    } 
} 

回答

0

改爲使用抽象類(如果您堅持使用接口,請使用工廠模式)。

對於抽象類,您只需在默認構造函數中進行必要的填充並添加一點反射。

喜歡的東西:

abstract class Base 
{ 
    protected Base() 
    { 
    var actualtype = GetType(); 
    foreach (var pi in actualtype.GetProperties()) 
    { 
     foreach (var attr in pi.GetCustomAttributes(
     typeof(MyPropertyAttribute), false)) 
     { 
     var data = GetData(attr.Name); // get data 
     pi.SetValue(this, data, null); 
     } 
    } 
    } 
} 

免責聲明:代碼可能無法編譯,我只是寫它從我的頭頂。

相關問題