public T WithKey <T>(int id)
        {
            Object @object = this.objectRepository.WithKey(id);
            StronglyTypedObjectBuilder <T> stronglyTypedObjectBuilder = new StronglyTypedObjectBuilder <T>();

            new ObjectDirector(this.requestHandler).ConstructObject(stronglyTypedObjectBuilder, @object);
            return(stronglyTypedObjectBuilder.Build());
        }
        public T WithKey <T>(int id)
        {
            Class            @class           = this.GetValidatedClass <T>();
            SerializedObject serializedObject = this.GetValidatedSerializedObject(@class, id);
            StronglyTypedObjectBuilder <T> stronglyTypedObjectBuilder = new StronglyTypedObjectBuilder <T>();

            new ObjectDirector(this.requestHandler).ConstructObject(stronglyTypedObjectBuilder, serializedObject);
            return(stronglyTypedObjectBuilder.Build());
        }
        public IEnumerable <T> All <T>()
        {
            Class @class = this.classRepository.WithCode(typeof(T).Name);
            IEnumerable <Object> objects        = this.objectRepository.FilteredByClassId(@class.Id);
            ObjectDirector       objectDirector = new ObjectDirector(this.requestHandler);

            return(objects.Select(
                       o =>
            {
                StronglyTypedObjectBuilder <T> stronglyTypedObjectBuilder = new StronglyTypedObjectBuilder <T>();

                objectDirector.ConstructObject(stronglyTypedObjectBuilder, o);
                return stronglyTypedObjectBuilder.Build();
            }
                       ));
        }
        public IEnumerable <T> All <T>(string filteringQuery = null, string sortingMemberCode = null, string sortingDirection = null, int?pagingSkip = null, int?pagingTake = null)
        {
            Class   @class = this.GetValidatedClass <T>();
            Culture frontendDefaultCulture = this.requestHandler.GetService <ICultureManager>().GetFrontendDefaultCulture();
            Params  @params = new ParamsFactory(this.requestHandler).Create(filteringQuery, @class.Id, sortingMemberCode, sortingDirection, pagingSkip, pagingTake);
            IEnumerable <SerializedObject> serializedObjects = this.serializedObjectRepository.FilteredByCultureIdAndClassId(
                frontendDefaultCulture.Id, @class.Id, @params
                );

            ObjectDirector objectDirector = new ObjectDirector(this.requestHandler);

            return(serializedObjects.Select(
                       so =>
            {
                StronglyTypedObjectBuilder <T> objectBuilder = new StronglyTypedObjectBuilder <T>();

                objectDirector.ConstructObject(objectBuilder, so);
                return objectBuilder.Build();
            }
                       ));
        }