【问题标题】:Populate properties decorated with an attribute填充用属性装饰的属性
【发布时间】:2010-03-25 11:09:18
【问题描述】:

是否有任何框架可以帮助我:(认为也许 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;
    }
}

【问题讨论】:

    标签: c# attributes structuremap inject


    【解决方案1】:

    改为使用抽象类(如果您坚持使用接口,则使用工厂模式)。

    使用抽象类,您只需在默认构造函数中进行必要的填充,只需稍作反射即可。

    类似:

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

    免责声明:代码可能无法编译,我只是从头开始写的。

    【讨论】:

      【解决方案2】:

      从 codeplex 检查以下框架: http://www.codeplex.com/AutoMapper 用于映射和 http://fasterflect.codeplex.com/ 用于快速反射以收集您的属性和设置值或获取值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-20
        • 2019-07-29
        • 2017-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多