示例#1
0
        public ModelTypeDescriptor(TypeDescriptorProvider typeDescriptorProvider, Type type)
        {
            this.TypeDescriptorProvider = typeDescriptorProvider;
            this.Type = type;

            this.DataAccessModelAttribute = type.GetFirstCustomAttribute <DataAccessModelAttribute>(true);

            foreach (var propertyInfo in this.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                var queryableAttribute = propertyInfo.GetFirstCustomAttribute <DataAccessObjectsAttribute>(true);

                if (queryableAttribute == null)
                {
                    continue;
                }

                var  propertyType = propertyInfo.PropertyType;
                Type genericType  = null;

                while (propertyType != null)
                {
                    if (propertyType.GetGenericTypeDefinitionOrNull() == typeof(DataAccessObjectsQueryable <>))
                    {
                        genericType = propertyType.GetGenericArguments()[0];
                    }

                    propertyType = propertyType.BaseType;
                }

                if (genericType == null)
                {
                    throw new ArgumentException("The DataAccessObjects queryable has no generic type");
                }

                var typeDescriptor = this.TypeDescriptorProvider.GetTypeDescriptor(genericType);

                if (typeDescriptor == null)
                {
                    throw new InvalidDataAccessObjectModelDefinition($"Type {genericType.Name} is referenced by model but not resolvable");
                }
            }
        }
示例#2
0
		public ModelTypeDescriptor(TypeDescriptorProvider typeDescriptorProvider, Type type)
		{
			this.TypeDescriptorProvider = typeDescriptorProvider;
			this.Type = type;

			this.DataAccessModelAttribute = type.GetFirstCustomAttribute<DataAccessModelAttribute>(true);

			foreach (var propertyInfo in this.Type.GetProperties(BindingFlags.Public | BindingFlags.Instance))
			{
				var queryableAttribute = propertyInfo.GetFirstCustomAttribute<DataAccessObjectsAttribute>(true);

				if (queryableAttribute == null)
				{
					continue;
				}

				var propertyType = propertyInfo.PropertyType;
				Type genericType = null;

				while (propertyType != null)
				{
					if (propertyType.GetGenericTypeDefinitionOrNull() == typeof(DataAccessObjectsQueryable<>))
					{
						genericType = propertyType.GetGenericArguments()[0];
					}

					propertyType = propertyType.BaseType;
				}

				if (genericType == null)
				{
					throw new ArgumentException("The DataAccessObjects queryable has no generic type");
				}

				var typeDescriptor = this.TypeDescriptorProvider.GetTypeDescriptor(genericType);

				if (typeDescriptor == null)
				{
					throw new InvalidDataAccessObjectModelDefinition($"Type {genericType.Name} is referenced by model but not resolvable");
				}
			}
		}