Добро пожаловать в Сообщество SJcoder. Итак, поскольку вы используете. NET Core, вы можете использовать Dependency Injection. Если вы не знакомы с концепцией, перейдите по этой ссылке здесь . Также я изменил ваш «GetMonthlyTotalExpense» с двойного на десятичный. Узнайте, почему здесь
Сначала вам понадобится интерфейс IEmployeeWebService. Это будет выглядеть следующим образом:
public interface IEmployeeWebService
{
List<Employee> FilterEmployeeBasedOnOverTime(List<Employee> employee, bool hasOvertime = false);
decimal GetTotalMonthlyExpense(List<Employee> employees);
}
Затем вы должны реализовать этот интерфейс. Таким образом, реализующий класс будет выглядеть следующим образом:
public class EmployeeWebService : IEmployeeWebService
{
public List<Employee> FilterEmployeeBasedOnOverTime(List<Employee> employee, bool hasOvertime = false)
{
return employee.Where(e => hasOvertime ? e.HoursPerMonth > 150 : e.HoursPerMonth <= 150).ToList();
}
public decimal GetTotalMonthlyExpense(List<Employee> employees)
{
return employees.Sum(e => e.GetMonthlyPay());
}
}
Затем вы должны указать DI-контейнеру, к какому классу будет преобразован интерфейс. Вам может быть интересно, что делает AddScoped <> (). Посмотрите эту ссылку , это помогло мне понять. Ваш класс запуска будет выглядеть следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IEmployeeWebService, EmployeeWebService>();
}
И теперь в вашем контроллере вы можете использовать сервис и его методы так:
public HomeController(IEmployeeWebService employeeWebService)
{
_employeeWebService = employeeWebService;
}
public IActionResult Index()
{
List<Models.Employee> filteredResults = _employeeWebService.FilterEmployeeBasedOnOverTime(employees, true);
return View(filteredResults);
}
Я не знаю, как вы получают ваших сотрудников, но если вы получаете их из базы данных, вы можете передать это в качестве параметра службе. Я надеюсь, что это помогает, и любые вопросы, пожалуйста, прокомментируйте:)