2010-03-25 6 views
0

Существуют ли какие-либо рамки, которые помогают мне с этим: (думая, что, возможно, StructureMap может мне помочь)заселить свойства декорированные с атрибутом

Всякий раз, когда я создаю новый экземпляр «MyClass» или любой другой класс, который наследуется от IMyInterface Я хочу, чтобы все свойства, украшенные [MyPropertyAttribute], заполнялись значениями из базы данных или другого хранилища данных, используя имя свойства в атрибуте.

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

Отказ от ответственности: код не компилируется, я просто написал ее из верхней части моей головы.

 Смежные вопросы

  • Нет связанных вопросов^_^