/// <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(); }
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); }