public MountainMutation(IMountainRepository mountainRepository, MountainMessageService mountainMessageService)
        {
            FieldAsync <MountainType>("createMountain",
                                      arguments: new QueryArguments(
                                          new QueryArgument <NonNullGraphType <MountainInputType> > {
                Name = "mountain"
            }),
                                      resolve: async context =>
            {
                var mountain = context.GetArgument <MountainInfo>("mountain");
                await mountainRepository.AddMountain(mountain);
                mountainMessageService.AddMountainAddedMessage(mountain);
                return(mountain);
            });

            FieldAsync <MountainType>("removeMountain",
                                      arguments: new QueryArguments(
                                          new QueryArgument <NonNullGraphType <MountainIdInputType> > {
                Name = "id"
            }),
                                      resolve: async context =>
            {
                var mountain = context.GetArgument <MountainInfo>("id");
                await mountainRepository.RemoveMountain(mountain.Id);
                return(mountain);
            });
        }
        public MountainQuery(IMountainRepository mountainRepository)
        {
            Field <ListGraphType <MountainType> >("mountains",
                                                  resolve: context => mountainRepository.GetAll()
                                                  );
            FieldAsync <MountainType>("mountain",
                                      arguments: new QueryArguments(new QueryArgument <NonNullGraphType <MountainIdInputType> > {
                Name = "id"
            }),
                                      resolve: async context =>
            {
                var mountain       = context.GetArgument <MountainInfo>("id");
                var mountainFromDb = await mountainRepository.GetById(mountain.Id);
                return(mountainFromDb);
            });

            //FieldAsync<MountainType>("selectmountain",
            //   arguments: new QueryArguments(new QueryArgument(typeof(int)) { Name = "id" }),
            //   resolve: async context =>
            //   {
            //       var mountain = context.GetArgument<MountainInfo>("id");
            //       var mountainFromDb = await mountainRepository.GetById(mountain.Id);
            //       return mountainFromDb;
            //   }); //sadly, we need to inherit from IGraphType and cannot just have simple scalar arguments in GraphQL.Net..
        }