private object CreateNewProxy(ObjectTypeDescriptor typeDescriptor, ObjectState objectState)
        {
            var interceptor = new ObjectStateManagementInterceptor(objectState, typeDescriptor, GetById);
            var proxy       = proxyGenerator.CreateClassProxy(typeDescriptor.RuntimeType, interceptor);

            return(proxy);
        }
 public ObjectTypeDescriptorRepository RegisterTypeDescriptor(ObjectTypeDescriptor typeDescriptor)
 {
     if (map.ContainsKey(typeDescriptor.ObjectTypeId))
     {
         throw new InvalidOperationException(string.Format("Another type with same id {0} has already been registered.", typeDescriptor.ObjectTypeId));
     }
     map[typeDescriptor.ObjectTypeId] = typeDescriptor;
     return this;
 }
        public static ObjectTypeDescriptorRepository RegisterUsingReflection(this ObjectTypeDescriptorRepository repository, Type typeToRegister)
        {
            var typeAttibute  = GetTypeAttibute(typeToRegister);
            var objectTypeId  = new ObjectTypeId(new Guid(typeAttibute.TypeIdValue));
            var typeDescritor = new ObjectTypeDescriptor(typeToRegister, objectTypeId, DiscoverAttributes(typeToRegister), DiscoverRelations(typeToRegister));

            repository.RegisterTypeDescriptor(typeDescritor);
            return(repository);
        }
 public ObjectTypeDescriptorRepository RegisterTypeDescriptor(ObjectTypeDescriptor typeDescriptor)
 {
     if (map.ContainsKey(typeDescriptor.ObjectTypeId))
     {
         throw new InvalidOperationException(string.Format("Another type with same id {0} has already been registered.", typeDescriptor.ObjectTypeId));
     }
     map[typeDescriptor.ObjectTypeId] = typeDescriptor;
     return(this);
 }
 public ObjectStateManagementInterceptor(ObjectState objectState, ObjectTypeDescriptor objectTypeDescriptor, Func <ObjectId, object> hydrateCallback)
 {
     this.objectState          = objectState;
     this.objectTypeDescriptor = objectTypeDescriptor;
     this.hydrateCallback      = hydrateCallback;
 }