Чтение онлайн

на главную

Жанры

Язык программирования 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
рейтинг книги
Здравствуй, 1985-й

Месть бывшему. Замуж за босса

Россиус Анна
3. Власть. Страсть. Любовь
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Месть бывшему. Замуж за босса

Безымянный раб

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
фэнтези
9.31
рейтинг книги
Безымянный раб

Действуй, дядя Доктор!

Юнина Наталья
Любовные романы:
короткие любовные романы
6.83
рейтинг книги
Действуй, дядя Доктор!

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Невеста вне отбора

Самсонова Наталья
Любовные романы:
любовно-фантастические романы
7.33
рейтинг книги
Невеста вне отбора

Темный Патриарх Светлого Рода 3

Лисицин Евгений
3. Темный Патриарх Светлого Рода
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 3

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам

Провинциал. Книга 4

Лопарев Игорь Викторович
4. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 4

Возвращение Безумного Бога 4

Тесленок Кирилл Геннадьевич
4. Возвращение Безумного Бога
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 4

Измена. Мой заклятый дракон

Марлин Юлия
Любовные романы:
любовно-фантастические романы
7.50
рейтинг книги
Измена. Мой заклятый дракон