GraphQL教程(一)。.net Core API2.1
阿新 • • 發佈:2018-12-30
1.建立專案
2.對類庫操作,在這裡建立三個資料夾,其中一個資料夾改名為schema
3.建立IMovieService,IActorService介面與實現類
GraphQL是什麼將放到第二章來講,第一章為GraphQL的準備工程
1.建立專案
之後選擇空專案,.net core 2.1
新增類庫,取名
2.對類庫操作,在這裡建立三個資料夾,其中一個資料夾改名為schema
Movie:用於確定movie類與actor類得型別
Schema:
Service:用來寫服務的
安裝GraphQL包,加入類庫中
在Movies資料夾中建立Movie類,Actor類與列舉MovieRating,MovieRating為Movie中其中一個的列舉
Movie
using GraphStudy.Movies.Movies; using System; namespace GraphStudy.Movie.Movies { //電影類 public class Movie { public int Id { get; set; }//電影編號 public string Name { get; set; } public DateTime ReleaseDate { get; set; }//上映時間 public string Company { get; set; } public int ActorId { get; set; }//演員ID public MovieRating MovieRating { get; set; }//電影等級列舉 } }
列舉MovieRating
using System;
namespace GraphStudy.Movies.Movies
{
[Flags]
public enum MovieRating
{
//這是電影的5個等級
Unrated = 0,
G = 1,
PG = 2,
PG13 = 3,
R = 4,
NC17 = 5
}
}
Actor演員類,寫簡單點
namespace GraphStudy.Movies.Movies { //演員類 public class Actor { public int Id { get; set; } public string Name { get; set; } } }
**
3.建立IMovieService,IActorService介面與實現類
**
在Services資料夾新增IMovieService,IActorService介面與MovieService,ActorServices實現類
IMovieService介面
using GraphStudy.Movies.Movies;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace GraphStudy.Movies.Services
{
public interface IMovieService
{
Task<IEnumerable<Movie>> GetAsyncs();//獲取所有列
Task<Movie> GetByIdAsync(int id);//獲取某個對應id屬性的列
Task<Movie> CreateAsync(Movie movie);//建立
}
}
IActorService介面
using GraphStudy.Movies.Movies;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace GraphStudy.Movies.Services
{
public interface IActorService
{
Task<Actor> GetByIdAsync(int id);//獲取某個演員資訊
Task<IEnumerable<Actor>> GetAsync();//獲取所有演員資訊
}
}
IMovieService介面的實現類MovieService類
using GraphStudy.Movies.Movies;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace GraphStudy.Movies.Services
{
public class MovieService : IMovieService
{
//因為我們需要建立子列表,所以一要用到IList
private readonly IList<Movie> _movie;
public MovieService()
{
_movie=new List<Movie>
{
#region 電影列表
new Movie
{
Id = 1,
Name = "肖申克的救贖The Shawshank Redemption",
Company = "美國",
MovieRating = MovieRating.G,
ActorId = 1,
ReleaseDate = new DateTime(1994-10-14)
},
new Movie
{
Id = 2,
Name = "這個殺手不太冷 Léon ",
Company = "法國",
MovieRating = MovieRating.NC17,
ActorId = 2,
ReleaseDate = new DateTime(1994-09-14)
},
new Movie
{
Id = 3,
Name = "三傻大鬧好萊塢",
Company = "印度",
MovieRating = MovieRating.PG,
ActorId = 3,
ReleaseDate = new DateTime(2011-12-08)
},
new Movie
{
Id = 4,
Name = "功夫",
Company = "美國",
MovieRating = MovieRating.G,
ActorId = 4,
ReleaseDate = new DateTime(2004-12-23)
}
#endregion
};
}
public Task<Movie> CreateAsync(Movie movie)
{
_movie.Add(movie);
return Task.FromResult(movie);
}
public Task<IEnumerable<Movie>> GetAsyncs()
{
return Task.FromResult(_movie.AsEnumerable());
}
public Task<Movie> GetByIdAsync(int id)
{
//在這裡需要做個判斷這個id是否存在
var movie = _movie.SingleOrDefault(x => x.Id == id);
if (movie == null)
{
throw new ArgumentException(String.Format("Movie ID {0} 不正確", id););
}
return Task.FromResult(movie);
}
}
}
IActorService介面的實現,ActorService類
using GraphStudy.Movies.Movies;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace GraphStudy.Movies.Services
{
public class ActorService : IActorService
{
private readonly IList<Actor> _actor;
public ActorService()
{
_actor=new List<Actor>
{
#region 演員列表
new Actor
{
Id = 1,
Name = "肖申克"
},
new Actor
{
Id=2,
Name = "讓·雷諾"
},
new Actor
{
Id = 3,
Name = "阿米爾·汗,卡琳娜·卡普爾 ",
},
new Actor
{
Id=4,
Name = "周星馳,元秋 元華"
}
#endregion
};
}
public Task<IEnumerable<Actor>> GetAsync()
{
return Task.FromResult(_actor.AsEnumerable());
}
public Task<Actor> GetByIdAsync(int id)
{
var actor = _actor.SingleOrDefault(x => x.Id == id);
if (actor == null)
{
throw new ArgumentException(String.Format("Actor ID {0} 不存在",id));
}
return Task.FromResult(actor);
}
}
}
此處注意:Movie與Actor中的ID為一對一,所以ActorService裡面new Actor中的id只可唯一,不可以重複,會出錯
4.在startup註冊服務
新增引用
如果出現以下情況
將類庫的版本降為.net core 2.1
右鍵點選類庫->屬性
如果無效,請把引用類庫取消在引用一次類庫
然後進行服務註冊
這是第一部分