根據昨天建出來的seed data
雖然目前已經有Product Model
但還不夠完整
今天繼續Model的部分,增加相關的interface和Repository
並且夠過DBContext去取得DB裡面的資料
這一篇主要針對Product這個Model去做調整
透過interface,去分別實作model的方法
注入到要使用的controller裡面,呼叫其方法
有點類似service的概念,只是透過interface去實作
建立Interface
先在Model下新增一個IProductRepository.cs
裡面宣告了一個GetAllProduct的屬性以及一個GetProductById的方法
建立Repository
同時在Model新增ProductRepository.cs,去實作這個interface
這邊也一起加上DBContext
ㄧ樣在 ASP .NET Core 是直接在建構子裡面注入這個Object
private readonly ShopMvcDbContext _context;
public ProductRepository(ShopMvcDbContext context)
{
_context = context;
}
將ProductRepository加入初始化service上
上一部宣告了 ProductRepository
但還需要註冊到初始化上
才有辦法透過Repository去連DB使用裡面的方法
因為是DB的操作,這裡使用AddScoped這個方式
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddScoped<IProductRepository, ProductRepository>();
...
在controller使用Repository
接下來是要修改目前自動建出來的controller method
以index 這個action來說
由指令建出來的樣板如下
目前是直接在controller使用DBContext
以及action使用async,DBContext也是直接將資料取出
並沒有另外做一些方法可以拿來使用
這邊先另外注入前面新增的interface,在controller直接call相關的方法或參數
private readonly IProductRepository _productRepository;
public ProductController(IProductRepository productRepository)//注入到建構子裡
{
_productRepository = productRepository;
}
// GET: Product
public ActionResult Index()
{
return View(_productRepository.GetAllProduct);//在productRepository所實作的參數
}
重build一次專案,確認一下結果,顯示的畫面會是相同的
接下來的CRUD也會透過這樣的方法去做改寫