public async Task<Version<T>[]> Load<T>(string id) where T : class, IAggregate
        {
            var snapshotType = _snapshotsConstructor.GetSnapshot(_aggregatesConstructor.BuildEmpty<T>())
                                                    .GetType();

            var serializer = new DomainSerializer();
            
            using (var snapshotItemsRepo = new RawSnapshotsRepository(option))
            {
                return (await snapshotItemsRepo.Load(EntityActorName.New<T>(id).
                                                           Name)).Select(s =>
                                                                         {
                                                                             var memento = (IMemento) serializer.FromBinary(s.Snapshot, snapshotType);
                                                                             var aggregate = (T) _aggregatesConstructor.Build(typeof(T), id, memento);
                                                                             return new Version<T>(aggregate, s.Timestamp);
                                                                         }).
                                                                  ToArray();
            }
        }
示例#2
0
        public void Test()
        {
            _aggregate = new Balloon(Guid.NewGuid().ToString(), "test");
            _aggregate.WriteNewTitle(10);
            _aggregate.ClearUncommitedEvents();

            var jsonSerializerSettings = DomainSerializer.GetDefaultSettings();

            jsonSerializerSettings.TraceWriter = new XUnitTraceWriter(_testOutputHelper);

            var jsonString = JsonConvert.SerializeObject(_aggregate, jsonSerializerSettings);

            _restoredAggregate = JsonConvert.DeserializeObject <Balloon>(jsonString, jsonSerializerSettings);
            _restoredAggregate.ClearUncommitedEvents();
            // Values_should_be_equal()
            Assert.Equal(_aggregate.Title, _restoredAggregate.Title);
            //Ids_should_be_equal()
            Assert.Equal(_aggregate.Id, _restoredAggregate.Id);
        }
        public void Propert_is_upgraded()
        {
            var initialEvent = new Event()
            {
                Payload = new SubObject_V1()
                {
                    Name = "10", Value = "123"
                }
            };

            var settings = DomainSerializer.GetDefaultSettings();

            settings.Converters.Add(new SubObjectConverter());

            var serializedValue = JsonConvert.SerializeObject(initialEvent, settings);
            var restoredEvent   = JsonConvert.DeserializeObject <Event>(serializedValue, settings);

            Assert.IsInstanceOf <SubObject_V2>(restoredEvent.Payload);
        }
示例#4
0
        public void All_old_objects_should_be_updated()
        {
            var initialEvent = new Event {
                Payload = new Payload {
                    Property = new SubObject_V1 {
                        Name = "10", Value = "123"
                    }
                }
            };

            var settings = DomainSerializer.GetDefaultSettings();

            settings.Converters.Add(new SubObjectConverter());

            var serializedValue = JsonConvert.SerializeObject(initialEvent, settings);
            var restoredEvent   = JsonConvert.DeserializeObject <Event>(serializedValue, settings);

            Assert.IsAssignableFrom <SubObject_V2>(restoredEvent.Payload.Property);
        }
示例#5
0
        public ActionResult Index()
        {
            string domain = DbConvention.GetDomain();

            var approved  = new DomainSerializer("domains-approved.json");
            var installed = new DomainSerializer("domains-installed.json");

            if (!approved.Get().Contains(domain))
            {
                return(this.HttpNotFound());
            }

            if (installed.Get().Contains(domain))
            {
                return(this.Redirect("/"));
            }

            InstallationFactory.Setup(domain); //Background job
            return(this.Content("Installing frapid, please visit the site after a few minutes."));
        }
        public void Property_upgraded_from_serialized_value()
        {
            var settings = DomainSerializer.GetDefaultSettings();

            settings.Converters.Add(new SubObjectConverter());

            var serializedValue = @"{
                              ""$id"": ""1"",
                              ""Payload"": {
                                ""$id"": ""2"",
                                ""$type"": """ + typeof(SubObject_V1).AssemblyQualifiedName + @""",
                                ""Name"": ""10"",
                                ""Value"": ""123""
                              }
                            }";

            var restoredEvent = JsonConvert.DeserializeObject <Event>(serializedValue, settings);

            Assert.IsInstanceOf <SubObject_V2>(restoredEvent.Payload);
        }
示例#7
0
        public static string ToCanonicalUrl(string url = "")
        {
            if (string.IsNullOrWhiteSpace(url))
            {
                url = HttpContext.Current.Request.Url.PathAndQuery;
            }

            string domain   = DbConvention.GetDomain();
            var    approved = new DomainSerializer("DomainsApproved.json");
            var    tenant   = approved.Get().FirstOrDefault(x => x.GetSubtenants().Contains(domain.ToLowerInvariant()));

            if (tenant != null)
            {
                string protocol   = HttpContext.Current.Request.IsSecureConnection ? "https://" : "http://";
                string domainName = protocol + tenant.DomainName;
                url = UrlHelper.CombineUrl(domainName, url);
                return(url);
            }

            return(string.Empty);
        }
示例#8
0
        public void DomainSerializerTest()
        {
            var serializer         = new DomainSerializer();
            var customerRepository = new CustomerRepository();


            var customer = customerRepository.CreateNew(0, "No");

            customer.MainAddress = new Address("1", "1", null, null, new Phone("!23", 1), null);
            customer.OtherAddresses.AddRange(new[] {
                new Address("2", "2", null, null, new Phone("9123", 1), null),
                new Address("3", "3", null, null, new Phone("123123", 1), null),
            });

            var serializedCustomer = serializer.Serialize(customer);

            var customerCopy = serializer.Deserialize <Customer>(serializedCustomer);

            Assert.IsTrue(ObjectComparer.Default.DeepEquals(customer, customerCopy));

            var invoiceRepository = new InvoiceRepository();

            var invoice = invoiceRepository.Create();
            var line    = invoice.CreateNewLine();

            line.Quantity  = 0.5m;
            line.ProductId = 1;
            line.SetKey(1);

            line           = invoice.CreateNewLine();
            line.Quantity  = 0.7m;
            line.ProductId = 2;
            line.SetKey(2);

            var serializedInvoice = serializer.Serialize(invoice);

            var invoiceCopy = serializer.Deserialize <Invoice>(serializedInvoice);

            Assert.IsTrue(ObjectComparer.Default.DeepEquals(invoice, invoiceCopy));
        }
示例#9
0
        public ActionResult Index()
        {
            string domain = DbConvention.GetDomain();

            var approved  = new DomainSerializer("DomainsApproved.json");
            var installed = new DomainSerializer("DomainsInstalled.json");

            if (!approved.GetTenantMembers().Any(x => x.Equals(domain)))
            {
                return(this.HttpNotFound());
            }

            if (installed.GetTenantMembers().Any(x => x.Equals(domain)))
            {
                return(this.Redirect("/"));
            }

            var setup = approved.Get().FirstOrDefault(x => x.GetSubtenants().Contains(domain.ToLowerInvariant()));

            InstallationFactory.Setup(setup); //Background job
            return(this.Content("Installing frapid, please visit the site after a few minutes."));
        }
示例#10
0
 /// <summary>
 /// Gets the deserialized domain objects.
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="name">The name.</param>
 /// <param name="func">The function.</param>
 /// <returns>List{``0}.</returns>
 public List <T> GetDeserializedDomainObjects <T>(XName name, Func <XElement, bool> func) where T : DomainObject <T>
 {
     Elements = GetXElements(name, func);
     return(Elements == null || Elements.Count() == 0 ? new List <T>() : DomainSerializer <List <T> > .Deserialize(Elements.FirstOrDefault()));
 }
示例#11
0
 private static T Deserialize <T>(byte[] source, DomainSerializer serializer = null)
 {
     return((T)(serializer ?? new DomainSerializer()).FromBinary(source, typeof(T)));
 }
示例#12
0
 private static byte[] Serialize(object source, DomainSerializer serializer = null)
 {
     return((serializer ?? new DomainSerializer()).ToBinary(source));
 }
 public void SaveBoutiqueOptions()
 {
     DomainSerializer <ObservableCollection <BoutiqueOption> >
     .Serialize(BoutiqueOptions, XmlConfigPath);
 }
 public void LoadBoutiqueOptions()
 {
     BoutiqueOptions = DomainSerializer <ObservableCollection <BoutiqueOption> >
                       .Deserialize(XmlConfigPath);
 }
        public void Test()
        {
            _aggregate = new SampleAggregate(Guid.NewGuid(), "test");
            _aggregate.ChangeState(10);
            _aggregate.ClearEvents();

            var jsonString = JsonConvert.SerializeObject(_aggregate, DomainSerializer.GetDefaultSettings());

            _restoredAggregate = JsonConvert.DeserializeObject <SampleAggregate>(jsonString, DomainSerializer.GetDefaultSettings());
        }