从我读到/看到的有3种方法来定义protobuf模型,使用.proto文件,使用类装饰和运行时调用来添加类型和字段。我正在寻找的是一种更像FluentNhibernate的方式,其中模型的定义被移除以单独为每个类别的程序分离文件以使模型更清洁。在这一思路中,我创建了一个类Buffer<T>
,它在实例化时将它定义的类添加到类型模型中。是否有可能在protobuf-net中合并RuntimeTypeModel
public class CustomerBuffer : Buffer<Customer>
{
public CustomerBuffer()
{
Add("ID");
Add("SyncID");
Add("AccountNumber");
Add("Reference");
Add("Contact");
Add("Address");
Add("CreditInformation");
}
}
应用于Buffer<T>
构造函数被创建的,因此时可用派生类构造函数被调用的类型模型。
当一切都被添加时,我需要能够将模型合并在一起,以便它们可以被编译。
到目前为止,我已经试过这样:
foreach(MetaType MT in model.GetTypes())
{
InternalModel.Add(MT.Type, false);
}
这显然不会,因为它的工作不是复制原始元类型的字段信息。
所以我正在寻找一个工作,可以让我搜索并从一个装配(或多个装配)中将Buffer<T>
派生的所有类型添加到类型模型中,然后进行编译。
不,目前没有提供;我真的很想更好地理解你在这里做什么; “合并模型”听起来像是一个**解决方案** - 你能告诉我你正试图解决的**问题是什么,以便我能够了解如何最好地解决它? – 2012-03-02 13:20:49
作为一个例子,这里有一个现有的建议是添加一个遇到新类型时调用的事件,从而允许规则即时应用(而不是全部预先)。 – 2012-03-02 13:27:26
@MarcGravell是合并/复制从一个TypeModel的MetaTypes到另一个更像是一个解决方案。我想要做的是定义一个Customer,如问题所示,通过发现程序集中的所有“映射”,以与Fluent Nhibernate相同的方式定义一个“映射”。所以我需要为.AddFromAssemblyOf实现一个发现所有protobuf-net“地图”的实现。由于地图中的唯一信息在构造函数中,所以我无法在模型构建之前将模型实例传递给缓冲区。想法是在构造函数完成后收集它。 –
2012-03-02 13:42:33