C# 修饰类层次结构

C# 修饰类层次结构,c#,generics,decorator,C#,Generics,Decorator,给定一个包含多个类的对象图,我如何获得一个修饰的层次实例,其中每个复杂类型也被修饰,而不为每个类型创建具体的映射?例如,如果我有以下内容: public class Root { public Child FirstBorn {get;set;} public Child SecondBorn {get;set;} } public class Child { public List<Possession> Possessions {get;set;} } pu

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

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 {

}
公共类根目录{
公子长子{get;set;}
第二个公共子对象{get;set;}
}
公营儿童{
公共列表财产{get;set;}
}
公有财产{
}
我想把所有复杂的类型都装饰成一个文档

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; }
}
公共类AsDocument
{
公共AST文件(T值)
{
价值=价值;
Id=ObjectId.GenerateNewId();
Origin=value.GetType().FullName;
}
公共字符串源{get;set;}
公共T值{get;set;}
公共对象Id{get;set;}
}
可以将根类修饰为:

var decoratedRoot = new AsDocument<Root>(someRoot);
var decoratedRoot=newasdocument(someRoot);
是否有一种方法可以使每种复杂类型都得到装饰

所以…如果decoratedRoot是以这种方式创建的。。。
长子和次子的类型分别为AsDocument和AsDocument

如果我正确理解您的意思,您需要这样的内容:

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 {

}
公共类根目录{
public AsDocument FirstBorn{get;set;}
public AsDocument SecondBorn{get;set;}
}
公营儿童{
公共列表财产{get;set;}
}
公有财产{
}

var decoratedChild=new-AsDocument(someChild);您想避免这样的专门化吗?在这种情况下,
AsDocument
应该继承自
T
,但编译器不允许这样做。您可以从“控制反转”库开始搜索,这将是静态结果。然而,我正在寻找一种类似于动态代理对象的东西。