Язык программирования C#9 и платформа .NET5
Шрифт:
Текущая версия
CarsController
жестко привязана к хранилищам в библиотеке доступа к данным. Следующая итерация CarsController
для связи с базой данных будет применять оболочку службы. Переименуйте CarsController
в CarsDalController
(включая конструктор) и добавьте в каталог Controllers
новый класс по имени CarsController
. Код этого класса является практически точной копией CarsController
, но они хранятся по отдельности с целью прояснения разницы между
На заметку! При работе с одной и той же базой данных вам редко придется применять вместе уровень доступа к данным и оболочку службы. Здесь показаны оба варианта, чтобы вы смогли решить, какой из них лучше подходит в вашей ситуации.
Приведите операторы
using
к следующему виду:
using System.Threading.Tasks;
using AutoLot.Dal.Repos.Interfaces;
using AutoLot.Models.Entities;
using AutoLot.Services.ApiWrapper;
using AutoLot.Services.Logging;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
Далее сделайте класс открытым, унаследуйте его от
Controller
и добавьте атрибут Route
. Создайте конструктор, который принимает экземпляры реализаций IAutoLotServiceWrapper
и IAppLogging
, после чего присвойте оба экземпляра переменным уровня класса. Вот начальный код:
namespace AutoLot.Mvc.Controllers
{
[Route("[controller]/[action]")]
public class CarsController : Controller
{
private readonly IApiServiceWrapper _serviceWrapper;
private readonly IAppLogging<CarsController> _logging;
public CarsController(IApiServiceWrapper serviceWrapper,
IAppLogging<CarsController>
logging)
{
_serviceWrapper = serviceWrapper;
_logging = logging;
}
}
Вспомогательный метод GetMakes
Вспомогательный метод
GetMakes
строит экземпляр SelectList
со всеми записями Make
в базе данных. Он использует Id
в качестве значения и Name
в качестве отображаемого текста:
internal async Task<SelectList> GetMakesAsync=>
new SelectList(
await _serviceWrapper.GetMakesAsync,
nameof(Make.Id),
nameof(Make.Name));
Вспомогательный
метод GetOneCar
Вспомогательный метод
GetOneCar
получает одиночную запись Car
:
internal async Task<Car> GetOneCarAsync(int? id)
=> !id.HasValue ? null : await _serviceWrapper.GetCarAsync(id.Value);
Открытые методы действий
Единственное отличие между открытыми методами действий в этом контроллере и аналогичными методами в
CarsDalController
связано с доступом к данным, а также с тем,что все методы определены как асинхронные. Поскольку вы уже понимаете, для чего предназначено то или иное действие, ниже приведены остальные методы, изменения в которых выделены полужирным:
[Route("/[controller]")]
[Route("/[controller]/[action]")]
public async Task<IActionResult> Index
=> View(await _serviceWrapper.GetCarsAsync);
[HttpGet("{makeId}/{makeName}")]
public async Task<IActionResult> ByMake(int makeId, string makeName)
{
ViewBag.MakeName = makeName;
return View(await _serviceWrapper.GetCarsByMakeAsync(makeId));
}
[HttpGet("{id?}")]
public async Task<IActionResult> Details(int? id)
{
if (!id.HasValue)
{
return BadRequest;
}
var car = await GetOneCarAsync(id);
if (car == null)
{
return NotFound;
}
return View(car);
}
[HttpGet]
public async Task<IActionResult> Create
{
ViewData["MakeId"] = await GetMakesAsync;
return View;
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Car car)
Поделиться:
Популярные книги
Магия чистых душ
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Здравствуй, 1985-й
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Месть бывшему. Замуж за босса
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Безымянный раб
1. Дорога домой
Фантастика:
фэнтези
9.31
рейтинг книги
Действуй, дядя Доктор!
Любовные романы:
короткие любовные романы
6.83
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Невеста вне отбора
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Темный Патриарх Светлого Рода 3
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 13
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Воин
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Барон не играет по правилам
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Провинциал. Книга 4
4. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 4
4. Возвращение Безумного Бога
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Измена. Мой заклятый дракон
Любовные романы:
любовно-фантастические романы
7.50