Shaolinq.Persistence.ModelTypeDescriptor.ModelTypeDescriptor C# (CSharp) Method

ModelTypeDescriptor() public method

public ModelTypeDescriptor ( TypeDescriptorProvider typeDescriptorProvider, Type type ) : System
typeDescriptorProvider TypeDescriptorProvider
type System.Type
return System
		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");
				}
			}
		}
	}
ModelTypeDescriptor