Из того, что я прочитал / увидел, есть 3 способа определения модели для protobuf, с файлами .proto, с оформлением классов и с помощью вызовов времени выполнения для добавления типов и полей. То, что я ищу, это немного больше похоже на FluentNhibernate, где определение модели удалено, чтобы отделить файлы от программы для каждого класса в отдельности, чтобы оставить модель более чистой. В этой мысли я создал класс Buffer<T>
, который при создании экземпляра добавляет класс, который он определяет, к модели типов.
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);
}
, который, очевидно, не будет работать, поскольку он не копирует информацию о поле в исходный MetaType.
Поэтому я ищу способ, который позволит мне искать и добавлять все типы, происходящие из Buffer<T>
внутри сборки (или нескольких сборок), в модель типа, а затем компилировать ее.