/// <summary>
        /// Add resources, services and repository implementations to the container.
        /// </summary>
        /// <param name="assembly">The assembly to search for resources in.</param>
        /// <param name="resourceNameFormatter">The type name formatter used to get the string representation of resource names.</param>
        public ServiceDiscoveryFacade AddAssemblyServices(Assembly assembly, IResourceNameFormatter resourceNameFormatter = null)
        {
            AddDbContextResolvers(assembly);
            AddAssemblyResources(assembly, resourceNameFormatter);
            AddAssemblyServices(assembly);
            AddAssemblyRepositories(assembly);

            return(this);
        }
        /// <summary>
        /// Adds resources to the graph and registers <see cref="ResourceDefinition{T}"/> types on the container.
        /// </summary>
        /// <param name="assembly">The assembly to search for resources in.</param>
        /// <param name="resourceNameFormatter">The type name formatter used to get the string representation of resource names.</param>
        public ServiceDiscoveryFacade AddAssemblyResources(Assembly assembly, IResourceNameFormatter resourceNameFormatter = null)
        {
            var identifiables = TypeLocator.GetIdentifableTypes(assembly);

            foreach (var identifiable in identifiables)
            {
                RegisterResourceDefinition(assembly, identifiable);
                AddResourceToGraph(identifiable, resourceNameFormatter);
            }

            return(this);
        }
        private void AddResourceToGraph(ResourceDescriptor identifiable, IResourceNameFormatter resourceNameFormatter = null)
        {
            var resourceName = FormatResourceName(identifiable.ResourceType, resourceNameFormatter);

            _graphBuilder.AddResource(identifiable.ResourceType, identifiable.IdType, resourceName);
        }
 /// <summary>
 /// Add resources, services and repository implementations to the container.
 /// </summary>
 /// <param name="resourceNameFormatter">The type name formatter used to get the string representation of resource names.</param>
 public ServiceDiscoveryFacade AddCurrentAssemblyServices(IResourceNameFormatter resourceNameFormatter = null)
 => AddAssemblyServices(Assembly.GetCallingAssembly(), resourceNameFormatter);
 private string FormatResourceName(Type resourceType, IResourceNameFormatter resourceNameFormatter)
 {
     resourceNameFormatter = resourceNameFormatter ?? new DefaultResourceNameFormatter();
     return(resourceNameFormatter.FormatResourceName(resourceType));
 }
 public DefaultRoutingConvention(IJsonApiOptions options, IResourceNameFormatter formatter)
 {
     _namespace = options.Namespace;
     _formatter = formatter;
 }
 /// <inheritdoc />
 public IResourceGraphBuilder UseNameFormatter(IResourceNameFormatter resourceNameFormatter)
 {
     _resourceNameFormatter = resourceNameFormatter;
     return(this);
 }
 public ResourceGraphBuilder(IResourceNameFormatter formatter)
 {
     _formatter = formatter;
 }