コード例 #1
0
        private EntityId UpdateHeroEntity(JsonElement obj, ISet <EntityId> entityIds)
        {
            EntityId entityId = _extractId(obj);

            entityIds.Add(entityId);

            if (entityId.Name.Equals("Human", StringComparison.Ordinal))
            {
                HumanEntity entity = _entityStore.GetOrCreate <HumanEntity>(entityId);
                entity.Name = DeserializeNonNullString(obj, "name");

                var friends = new List <EntityId>();

                foreach (JsonElement child in obj.GetProperty("friends").EnumerateArray())
                {
                    friends.Add(UpdateFriendEntity(child, entityIds));
                }

                entity.Friends = friends;
                return(entityId);
            }

            if (entityId.Name.Equals("Droid", StringComparison.Ordinal))
            {
                DroidEntity entity = _entityStore.GetOrCreate <DroidEntity>(entityId);
                entity.Name = DeserializeNonNullString(obj, "name");

                var friends = new List <EntityId>();

                foreach (JsonElement child in obj.GetProperty("friends").EnumerateArray())
                {
                    friends.Add(UpdateFriendEntity(child, entityIds));
                }

                entity.Friends = friends;

                return(entityId);
            }

            throw new NotSupportedException();
        }
コード例 #2
0
        private EntityId UpdateFriendEntity(JsonElement obj, ISet <EntityId> entityIds)
        {
            EntityId entityId = _extractId(obj);

            entityIds.Add(entityId);

            if (entityId.Name.Equals("Human", StringComparison.Ordinal))
            {
                HumanEntity entity = _entityStore.GetOrCreate <HumanEntity>(entityId);
                entity.Name = DeserializeNonNullString(obj, "name");
                return(entityId);
            }

            if (entityId.Name.Equals("Droid", StringComparison.Ordinal))
            {
                DroidEntity entity = _entityStore.GetOrCreate <DroidEntity>(entityId);
                entity.Name = DeserializeNonNullString(obj, "name");
                return(entityId);
            }

            throw new NotSupportedException();
        }
コード例 #3
0
        public async Task Foo()
        {
            var entityStore    = new EntityStore();
            var operationStore = new OperationStore(entityStore.Watch());

            var connection = new MockConnection();

            var humanMapper = new HumanMapper();
            var droidMapper = new DroidMapper();

            var humanHeroMapper = new HumanHeroMapper(
                entityStore,
                humanMapper,
                droidMapper);

            var droidHeroMapper = new DroidHeroMapper(
                entityStore,
                humanMapper,
                droidMapper);

            var resultDataFactory = new GetHeroResultFactory(
                entityStore,
                humanHeroMapper,
                droidHeroMapper);

            var resultBuilder = new GetHeroResultBuilder(
                entityStore,
                ExtractEntityId,
                resultDataFactory,
                new SerializerResolver(new[] { new StringSerializer() }));

            var operationExecutor = new OperationExecutor <JsonDocument, GetHeroResult>(
                connection,
                () => resultBuilder,
                operationStore,
                ExecutionStrategy.NetworkOnly);

            GetHeroResult?result = null;
            var           query  = new GetHeroQuery(operationExecutor);

            query.Watch().Subscribe(c =>
            {
                result = c.Data;
            });

            await Task.Delay(1000);

            using (entityStore.BeginUpdate())
            {
                DroidEntity entity = entityStore.GetOrCreate <DroidEntity>(new EntityId("Droid", "abc"));
                entity.Name = "C3-PO";
            }

            await Task.Delay(1000);

            Assert.NotNull(result);

            EntityId ExtractEntityId(JsonElement obj) =>
            new(
                obj.GetProperty("__typename").GetString() !,
                obj.GetProperty("id").GetString() !);
        }