Exemple #1
0
        public void Serialize(Commit commit, object[] events)
        {
            Expect.NotNull(commit, "commit");
            Expect.NotEmpty(events, "events");

            var position = 0;

            commit.PayloadLayout = new PayloadLayout(events.Length);
            using (var stream = new MemoryStream(UsualCommitSize * events.Length))
            {
                for (int i = 0; i < events.Length; i++)
                {
                    var evt       = events[i];
                    var evtType   = evt.GetType();
                    var evtTypeId = CreateTypeId(evtType);

                    var concreteType = eventFactory.GetConcreteType(evtType);
                    var bytes        = JsonSerializer.SerializeToUtf8Bytes(evt, concreteType, options);
                    ////var s = Encoding.UTF8.GetString(bytes);
                    stream.Write(bytes, 0, bytes.Length);

                    commit.PayloadLayout.Add(position, bytes.Length, evtTypeId);

                    if (i != events.Length - 1)
                    {
                        stream.WriteByte(NewLineByte);
                        stream.WriteByte(NewLineByte);
                        position += bytes.Length + 2;
                    }
                }

                commit.Payload = stream.ToArray();
            }

            commit.ItemsCount   = (short)events.Length;
            commit.SerializerId = SerializerId;
        }
        public override Type BindToType(string assemblyName, string typeName)
        {
            Expect.NotEmpty(assemblyName, "assemblyName");
            Expect.NotEmpty(typeName, "typeName");

            var type = Type.GetType(typeName + ", " + assemblyName);

            if (type == null)
            {
                throw new Exception($"Failed to create type '{typeName}, {assemblyName}'");
            }

            if (type.IsInterface)
            {
                var concreteType = eventFactory.GetConcreteType(type);
                return(concreteType);
            }

            return(type);
        }