private static Schema CreateSchema()
        {
            var repository    = new CharacterRepository();
            var eventRegistry = new InMemoryEventRegistry();
            var registry      = new DataLoaderRegistry(new EmptyServiceProvider());

            var services = new Dictionary <Type, object>
            {
                [typeof(CharacterRepository)] = repository,
                [typeof(Query)]               = new Query(repository),
                [typeof(Mutation)]            = new Mutation(),
                [typeof(Subscription)]        = new Subscription(),
                [typeof(IEventSender)]        = eventRegistry,
                [typeof(IEventRegistry)]      = eventRegistry,
                [typeof(IDataLoaderRegistry)] = registry
            };

            var serviceResolver = new Func <Type, object>(
                t =>
            {
                if (services.TryGetValue(t, out var s))
                {
                    return(s);
                }
                return(null);
            });

            var serviceProvider = new Mock <IServiceProvider>(
                MockBehavior.Strict);

            serviceProvider.Setup(t => t.GetService(It.IsAny <Type>()))
            .Returns(serviceResolver);

            registry.Register(typeof(HumanDataLoader).FullName,
                              s => new HumanDataLoader(repository));

            return(Schema.Create(c =>
            {
                c.RegisterServiceProvider(serviceProvider.Object);

                c.RegisterQueryType <QueryType>();
                c.RegisterMutationType <MutationType>();
                c.RegisterSubscriptionType <SubscriptionType>();

                c.RegisterType <HumanType>();
                c.RegisterType <DroidType>();
                c.RegisterType <EpisodeType>();
            }));
        }
        public async Task TestAuthorResolver()
        {
            // arrange

            /*IServiceProvider sp = new ServiceCollection()
             *              .AddDataLoaderRegistry()
             *              .AddSingleton<IAuthorService, InMemoryAuthorService>()
             *              .BuildServiceProvider();*/

            IServiceProvider sp = new ServiceCollection()
                                  .BuildServiceProvider();

            var x = sp.GetService <IResolverContext>();

            ISchema schema = Schema.Create(c =>
            {
                c.RegisterQueryType <QueryType>();
            });

            ObjectType  type  = schema.GetType <ObjectType>("QueryType");
            ObjectField field = type.Fields["authorByCountry"];

            Mock <IResolverContext> resolverContexMock = new Mock <IResolverContext>();

            resolverContexMock.Setup(c => c.Service <IAuthorService>()).Returns(new InMemoryAuthorService());
            var dl = new DataLoaderRegistry(sp);

            dl.Register <string, Author>("authorByCountry", (IReadOnlyList <string> keys) =>
            {
                List <Author> a = new List <Author>();

                return(Task.FromResult(a.ToLookup(a1 => a1.Country)));
            });
            resolverContexMock.Setup(c => c.Service <IEnumerable <IDataLoaderRegistry> >()).Returns(new List <DataLoaderRegistry>(new[] { dl }));
            // resolverContexMock.Setup(c => c.Service<IAuthorService>()).Returns(sp.GetService<IAuthorService>);
            // resolverContexMock.Setup(c => c.ScopedContextData.)
            // act
            var result = await field.Resolver(resolverContexMock.Object);

            // assert
        }