创建服务

在引入视图模型后,由于需要将视图模型转换为模型,因此控制器中的代码开始变得多了起来。

可以引入一个中间层,专门负责视图模型和模型之间的转换,我们把这个层次称为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");
    }
}