【问题标题】:Decorate class hierarchy装饰类层次结构
【发布时间】:2019-01-09 09:57:52
【问题描述】:

给定一个具有多个类的对象图,我如何获得一个装饰层次实例,其中每个复杂类型也被装饰,而不为每种类型创建具体映射?例如,如果我有以下内容:

public class Root {
   public Child FirstBorn {get;set;}
   public Child SecondBorn {get;set;}
}

public class Child {
   public List<Possession> Possessions {get;set;}
}

public class Possession {

}

我想将所有复杂类型都装饰成一个文档...

public class AsDocument<T>
{
    public AsDocument(T value)
    {
        Value = value;
        Id = ObjectId.GenerateNewId();
        Origin = value.GetType().FullName;

    }

    public String Origin { get; set; }
    public T Value { get; set; }

    public ObjectId Id { get; set; }
}

可以将根类装饰为:

var decoratedRoot = new AsDocument<Root>(someRoot);

是否有一种方法可以同时修饰每个复杂类型?

所以...如果 decoratedRoot 是以这种方式创建的... FirstBorn 和 SecondBorn 将是 AsDocument 和 AsDocument 类型

【问题讨论】:

  • var decoratedChild = new AsDocument(someChild);你想避免这样的专业化吗?
  • 这种情况下AsDocument&lt;T&gt;应该继承自T,但是编译器不允许。您可以从“控制反转”库开始搜索

标签: c# generics decorator


【解决方案1】:

如果我理解正确,你想要这样的东西:

public class Root {
   public AsDocument<Child> FirstBorn {get;set;}
   public AsDocument<Child> SecondBorn {get;set;}
}

public class Child {
   public List<AsDocument<Possession>> Possessions {get;set;}
}

public class Possession {

}

【讨论】:

  • 这将是静态结果。但是,我正在寻找类似于动态代理对象的东西。
猜你喜欢
  • 1970-01-01
  • 2020-03-29
  • 2011-04-02
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
  • 2017-01-24
  • 2017-09-25
相关资源
最近更新 更多