戳戳猫的小窝
更新日志
关于
在引入视图模型后,由于需要将视图模型转换为模型,因此控制器中的代码开始变得多了起来。 可以引入一个中间层,专门负责视图模型和模型之间的转换,我们把这个层次称为**Service(服务层,业务层)**。 # 创建Service 在项目根目录下创建一个名为**Services**的文件夹,并在**Services文件夹**下创建Service类**MajorService**。 在MajorService中添加Insert方法,此方法接收MajorViewModel类型的参数,并调用将MajorViewModel类型的数据转换为Major类型的数据,并插入到数据库中。 由于插入数据需要引入MajorRepo的实例,因此还需要在构造函数中添加MajorRepo类型的参数注入实例。 最终代码如下: ``` public class MajorService(MajorRepo majorRepo) { public void Insert(MajorViewModel model) { Major major = new Major() { Name = model.Name, }; majorRepo.Insert(major); } } ``` # 将MajorService注册为服务 在Program.cs中添加`services.AddScoped<MajorService>();`。 ``` services.AddScoped<MajorRepo>(); services.AddScoped<GradeRepo>(); services.AddScoped<ClassRepo>(); services.AddScoped<StudentRepo>(); services.AddScoped<MajorService>(); ``` # 在控制器中引入MajorService实例 有了**MajorService**之后,就不需要在控制器中直接引入**MajorRepo**的实例,而是可以引入**MajorService**的实例,调用它的**Insert方法**。 代码如下: ``` public class MajorController(MajorService majorService) : Controller { public IActionResult Index() { return View(); } public IActionResult Add() { return View(); } [HttpPost] public IActionResult Add(MajorViewModel model) { majorService.Insert(model); return RedirectToAction("Index"); } } ```
创建服务