【发布时间】: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<T>应该继承自T,但是编译器不允许。您可以从“控制反转”库开始搜索