Example #1
0
        /// <summary>
        /// Creates a new GraphQLBuilder
        /// </summary>
        /// <param name="services">The service collection which will contain the added singletons</param>
        public GraphQLBuilder(IServiceCollection services)
        {
            var schema          = new StitchedQuery();
            var serviceProvider = services.BuildServiceProvider();
            var resolver        = new FuncDependencyResolver(type =>
            {
                var service = services.Where(svc => svc.ServiceType == type).FirstOrDefault();
                if (service is null || service.ImplementationInstance is null)
                {
                    return(serviceProvider.GetService(type));
                }

                return(service.ImplementationInstance);
            });

            Schema   = schema;
            Resolver = resolver;
            Services = services;
            services.AddSingleton(schema);
            services.AddSingleton <IDocumentExecuter, DocumentExecuter>();
            //services.AddSingleton<GuidGraphType>();
            //services.AddSingleton<EnumerationGraphType>();
            //services.AddSingleton<DateTimeGraphType>();

            GraphQLExtensions.AddUnsupportedGraphQLConversions();
        }
Example #2
0
        IGraphQLBuilder IGraphQLBuilder.Type <T>()
        {
            try
            {
                if (GraphQLExtensions.IsExtendedGraphQLType(typeof(T)))
                {
                    var type = typeof(T).IsGenericType ? typeof(T).GenericTypeArguments[0] : typeof(T);

                    if (((IGraphQLBuilder)this).GraphQLTypes.ContainsKey(typeof(T)))
                    {
                        return(this);
                    }

                    var graphQlTypeInstance = Activator.CreateInstance <T>();
                    ((IGraphQLBuilder)this).GraphQLTypes.Add(typeof(T), graphQlTypeInstance);
                }
                else
                {
                    var userType = GraphQLCoreTypeWrapperGenerator.CreateGraphQLTypeWrapper <T>();

                    if (((IGraphQLBuilder)this).GraphQLTypes.ContainsKey(userType))
                    {
                        return(this);
                    }

                    var graphQlTypeInstance = new GenericType <T>(this)
                    {
                        Name = typeof(T).Name
                    };
                    ((IGraphQLBuilder)this).GraphQLTypes.Add(userType, graphQlTypeInstance);
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            return(this);
        }