持久的无知和懒惰的装载

时间:2011-12-27 13:32:53

标签: c#

嘿,我找不到解决这个问题的方法: 我正在为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类中的每个属性的访问者而无需修改它,不想添加和基类或接口到它

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

您可以查看dynamicproxy。要使用它们,您需要定义要将代码附加到虚拟的属性。然后你就可以附加拦截器了。有关详细信息,请参阅a tutorial