示例#1
0
        public void GetIdType_Correctly_Identifies_JsonApiResource()
        {
            // arrange
            var type          = typeof(Model);
            var exextedIdType = typeof(int);

            // act
            var result = TypeLocator.GetIdType(type);

            // assert
            Assert.NotNull(result);
            Assert.True(result.isJsonApiResource);
            Assert.Equal(exextedIdType, result.idType);
        }
示例#2
0
        public void GetIdType_Correctly_Identifies_NonJsonApiResource()
        {
            // arrange
            var  type          = typeof(DerivedType);
            Type exextedIdType = null;

            // act
            var result = TypeLocator.GetIdType(type);

            // assert
            Assert.NotNull(result);
            Assert.False(result.isJsonApiResource);
            Assert.Equal(exextedIdType, result.idType);
        }
示例#3
0
        /// <inheritdoc />
        public IResourceGraphBuilder AddResource(Type resourceType, Type idType = null, string pluralizedTypeName = null)
        {
            AssertEntityIsNotAlreadyDefined(resourceType);
            if (resourceType.Implements <IIdentifiable>())
            {
                pluralizedTypeName ??= FormatResourceName(resourceType);
                idType ??= TypeLocator.GetIdType(resourceType);
                _resources.Add(GetEntity(pluralizedTypeName, resourceType, idType));
            }
            else
            {
                _validationResults.Add(new ValidationResult(LogLevel.Warning, $"{resourceType} does not implement 'IIdentifiable<>'. "));
            }

            return(this);
        }
        /// <inheritdoc />
        public IResourceGraphBuilder AddResource(Type resourceType, Type idType = null, string pluralizedTypeName = null)
        {
            if (_resources.All(e => e.ResourceType != resourceType))
            {
                if (resourceType.IsOrImplementsInterface(typeof(IIdentifiable)))
                {
                    pluralizedTypeName ??= FormatResourceName(resourceType);
                    idType ??= TypeLocator.GetIdType(resourceType);
                    var resourceContext = CreateResourceContext(pluralizedTypeName, resourceType, idType);
                    _resources.Add(resourceContext);
                }
                else
                {
                    _logger.LogWarning($"Entity '{resourceType}' does not implement '{nameof(IIdentifiable)}'.");
                }
            }

            return(this);
        }