Я использую отражение, чтобы найти все классы в моем проекте, которые наследуются от Packet.Base
К каждому из этих классов применены атрибуты ProtoBuf. * 1003 *
Я только что испытал Protobuf.net Exception - Время ожидания при проверке метаданных моего проекта и желание реализовать PrepareSerializer без необходимости проходить через него и добавлять все различные типы классов.
Есть ли простой способ, которым я могу динамически подготовить классы, учитывая, что у меня есть тип из отражения, без необходимости вызывать
ProtoBuf.Serializer.PrepareSerializer(Of Instruction)()
ProtoBuf.Serializer.PrepareSerializer(Of NoOperation)()
или добавлять
Public MustOverride Sub Prepare()
в базовый класс, а затем в каждый класс
Public Overrides Sub Prepare()
Serializer.PrepareSerializer(Of TimeSynchronise)()
End Sub
Это механизм загрузки, который я использую, довольно простая нагрузка отражения.
Public Class CompatiblePackets
Inherits Dictionary(Of Packet.PacketType, Base)
Public Sub New()
Dim theAssembly As Assembly = Assembly.GetExecutingAssembly
For Each t As Type In theAssembly.GetTypes
If t.BaseType Is GetType(Base) Then
Dim p As Base = CType(t.Assembly.CreateInstance(t.FullName), Base)
Me.Add(p.PacketTypeIndicator, p)
End Try
End If
Next
End Sub
public sub Prepare
ProtoBuf.Serializer.PrepareSerializer(t)()
end sub