從我讀到/看到的有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