ASP.NET Core 如何使用Mvc相关技术建立Controller、Tag Helper (上)

使用Mvc相关技术来完善一下前几篇文章的小栗子。。。

  • Controller
  • Tag Helper
  • Settings
  • View Component
  • Razor Page

首先添加一个Model文件夹

Department部门类(1):

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Models
{
    public class Department
    {
        public int Id { get; set; }
        [Display(Name ="部门名称")]
        public string Name { get; set; }
        public string Location { get; set; }
        public int EmployeeCount { get; set; }
    }
}

 Employee员工类(多):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Models
{
    public class Employee
    {
        public int Id { get; set; }
        public int DepartmentId { get; set; } //外键
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public Gender Gender { get; set; }
        public bool Fired { get; set; }
    }

    public enum Gender
    { 
        女=0,
        男=1
    }
}

CompanySummary类:统计员工总数以及每个部门平均员工数量

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebApplication1.Models
{
    /// <summary>
    /// 公司
    /// </summary>
    public class CompanySummary
    {
        //员工总数
        public int EmployeeCount { get; set; }
        //部门平均员工数量
        public int AverageDepartmentEmployeeCount { get; set; }
    }
}

添加一个Services文件夹,在文件夹里面添加两个服务。

一个是IDepartmentService接口,一个是IEmployeeService接口

IDepartmentService:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApplication1.Models;

namespace WebApplication1.Services
{
    public interface IDepartmentService
    {
        //获取所有部门
        Task<IEnumerable<Department>> GetAll();
        //通过Id获取部门
        Task<Department> GetById(int id);
        Task<CompanySummary> GetCompanySummary();
        //添加部门
        Task Add(Department department);
    }
}

接下来就是实现这两个接口!同样是在Services文件夹里面添加对应的实现接口的两个类

DepartmentService类:

首先将定义的departmentService类继承接口IDepartmentService 实现接口方法 。

通过readonly定义一个只读的List集合,在构造数里面添加几条部门数据。

GetAll()方法:返回类型为Task。这里涉及到了C#的异步编程。

GetById():根据部门Id进行查询。

GetCompanySummary():查询部门总人数以及每个部门的平均人数

Add():新增,将新增的Id在部门最大Id+1即可。

写到这里呢,就是一套服务了。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApplication1.Models;

namespace WebApplication1.Services
{
    public class DepartmentService:IDepartmentService
    {
        private readonly List<Department> _departments = new List<Department>();
        public DepartmentService()
        {
            _departments.Add(new Department
            {
                Id=1,
                Name="HR",
                EmployeeCount=16,
                Location="北京"
            });
            _departments.Add(new Department
            {
                Id = 2,
                Name = "HR1",
                EmployeeCount = 52,
                Location = "上海"
            });
            _departments.Add(new Department
            {
                Id = 3,
                Name = "HR2",
                EmployeeCount = 200,
                Location = "广州"
            });
        }

        public Task<IEnumerable<Department>> GetAll()
        {
            return Task.Run(()=>_departments.AsEnumerable());
        }
        public Task<Department> GetById(int id)
        {
            return Task.Run(() => _departments.FirstOrDefault(x => x.Id == id));
        }

        public Task<CompanySummary> GetCompanySummary()
        {
            return Task.Run(() =>
            {
                return new CompanySummary
                {
                    EmployeeCount = _departments.Sum(x => x.EmployeeCount),
                    AverageDepartmentEmployeeCount = (int)_departments.Average(x => x.EmployeeCount)
                };
            });
        }
        public Task Add(Department department)
        {
            //现有部门最大Id+1就是最新Id
            department.Id = _departments.Max(x => x.Id) + 1;
            _departments.Add(department);
            return Task.CompletedTask;
        }
    }
}

IEmployeeService:接下来也是一套服务。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApplication1.Models;

namespace WebApplication1.Services
{
    public interface IEmployeeService
    {
        Task Add(Employee employee);
        Task<IEnumerable<Employee>> GetByDepartmentId(int departmentId);
        Task<Employee> Fire(int id);
    }
}

EmployeeService类:这个类里面的方法和部门类的方法基本上差不多,也都是返回Task。

GetByDepartmentId():根据部门Id查询该部门所有人员。

Add():一样也是做新增员工操作。

Fire():这个方法主要是负责员工是否已离职,离职:False、在职:True(默认)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using WebApplication1.Models;

namespace WebApplication1.Services
{
    public class EmployeeService : IEmployeeService
    {
        private readonly List<Employee> _employees = new List<Employee>();

        public EmployeeService()
        {
            _employees.Add(new Employee
            {
                Id=1,
                DepartmentId=1,
                FirstName="Nick",
                LastName="Carter",
                Gender=Gender.男
            });
            _employees.Add(new Employee
            {
                Id = 2,
                DepartmentId = 1,
                FirstName = "Michael",
                LastName = "Jackson",
                Gender = Gender.男
            });
            _employees.Add(new Employee
            {
                Id = 3,
                DepartmentId = 1,
                FirstName = "Mariah",
                LastName = "Carey",
                Gender = Gender.女
            });
            _employees.Add(new Employee
            {
                Id = 4,
                DepartmentId = 2,
                FirstName = "Avril",
                LastName = "CarLavigneter",
                Gender = Gender.女
            });
            _employees.Add(new Employee
            {
                Id = 5,
                DepartmentId = 3,
                FirstName = "小希",
                LastName = "",
                Gender = Gender.女
            });
            _employees.Add(new Employee
            {
                Id = 6,
                DepartmentId = 3,
                FirstName = "小伟",
                LastName = "",
                Gender = Gender.男
            });
        }

        public Task Add(Employee employee)
        {
            employee.Id = _employees.Max(x => x.Id) + 1;
            _employees.Add(employee);
            return Task.CompletedTask;
        }

        public Task<Employee> Fire(int id)
        {
            return Task.Run(() =>
            {
                var employee = _employees.FirstOrDefault(e => e.Id == id);
                if (employee != null)
                {
                    employee.Fired = true;
                    return employee;
                }
                return null;
            });
        }

        public Task<IEnumerable<Employee>> GetByDepartmentId(int departmentId)
        {
            return Task.Run(() => _employees.Where(x=>x.DepartmentId==departmentId));
        }
    }
}

这两套服务搞定后,就是注册这两套服务了。。。

去到Startup类:

public void ConfigureServices(IServiceCollection services)
{
     //负责配置依赖注入
     //DI 依赖注入机制依赖于IOC容器(控制反转)
     //使用Asp.NET Core MVC,所有需要通道控制器和视图要进行注册一下mvc(通过services服务注册)
     services.AddControllersWithViews();

     //分别注册服务
     services.AddSingleton<IDepartmentService, DepartmentService>();
     services.AddSingleton<IEmployeeService, EmployeeService>();
}
原文地址:https://www.cnblogs.com/hcyesdo/p/12835040.html