2011-12-27 17 views
1

ねえ、私はこのような問題の解決策を見つけることができません: 私は永続性の無知と遅延ロード

は、このようなコードを実行したいEAVパターンのための汎用的なインタフェースを実装しています:

Entity<GPS> gps = new Entity<GPS>("Path.To.GPS"); 
    Console.WriteLine(gps.Attributes.Latitude); 
    Console.WriteLine(gps.Attributes.Longitude); 

public class GPS : IAttributes 
    { 
     public double Latitude { get; set; } 
     public double Longitude { get; set; } 
    } 

    public abstract class Entity 
    { 
     public IAttributes Attributes { get; set; } 
     public string Path { get; set; } 

     public Entity(string path) 
     { 
      this.Path = path; 
     } 
    } 

    public class Entity<T> : Entity 
     where T : IAttributes, new() 
    { 
     private T attributes = new T(); 

     new public T Attributes 
     { 

      get { return attributes; } 

      set { attributes = value; } 

     } 
     public Entity(string path) 
      : base(path) 
     { } 
    } 

    public interface IAttributes 
    { 
     /* Empty by design */ 
    } 

データロードのためのEntityクラスメソッドへの追加が容易 T内のすべてのパラメータを反復処理し、いくつかのソースからロードします

簡単パス:

Entity<GPS> gps = new Entity<GPS>("Path.To.GPS"); 
    gps.Reload(); // <-- ADD THIS HERE 
    Console.WriteLine(gps.Attributes.Latitude); 
    Console.WriteLine(gps.Attributes.Longitude); 

が、どのように遅延読み込みを行うには?



それにどんなアドバイスのため

感謝を追加し、基底クラスやインターフェイスにしたくない、それを変更することなく、GPSクラスのすべてのプロパティのアクセサにいくつかのコードを「添付」することが可能です。

答えて

0

dynamicproxyをご覧ください。それらを利用するには、コードを仮想としてアタッチするプロパティを定義する必要があります。その後、インターセプタを接続できます。詳細については、a tutorialを参照してください。