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

2 に答える 2

0

codeplexから次のフレームワークを確認してください: マッピングについては http://www.codeplex.com/AutoMapper、プロパティとsetvaluesまたはgetvaluesを収集するための高速リフレクションについてはhttp://fasterflect.codeplex.com/ 。

于 2010-03-25T13:11:12.820 に答える
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);
      }
    }
  }
}

免責事項:コードはコンパイルできない可能性があります。頭のてっぺんから書いただけです。

于 2010-03-25T11:18:46.413 に答える