.net core N-Layered Web Api, использующий автомапер для передачи DTO между контроллером и ошибками сервисных уровней
Я новичок в веб-API, и многоуровневая архитектура ниже - это структура всего моего проекта.
я хочу знать, как передать сущности от контроллера к сервису и снова вернуться от сервиса к контроллеру
ниже то, что я написал в контроллере
ниже то, что я написал в сервисе
ниже класс DTO
ниже приведены ошибки что я получил и запутался в конце концов, пожалуйста, спасите мой день
1 ответ
Здесь много чего не так. Я думаю, что они в основном происходят из-за путаницы между вашим DTO и модельными классами.
Так что все эти ошибки, потому что вы объявили ITodoService
использовать / вернуть TodoItem
экземпляры, но вы используете TodoItemDto
вместо:
TodoService.GetAll
,TodoService.GetByid
а такжеTodoService.Delete
все требуютTodoItem
на интерфейсе, но вы использовалиTodoitemDto
когда вы реализовали их вTodoService
, (Три ошибки в строке 13TodoService.cs
).- Вы вообще не возвращаете значение из
TodoService.Delete
, Возвращаемое значение должно бытьTodoItem
неTodoItemDto
, (TodoService.cs
строка 26) _dorepo.Delete()
возвращает недействительным Вы не можете присвоить его переменной. Я не могу вам помочь, потому что я не знаю, что вы намеревались сделать. (TodoService.cs
строка 29)- Так как
TodoService.GetAll
неправильно определен для возвратаTodoItemDto
, значение от_dorepo.GetAll
не может быть возвращено. Исправление состоит в том, чтобы изменить объявление функции для возвратаTodoItem
, как указано в пункте 1 выше. (TodoService.cs
строка 37)
Вы не показываете код для TodoController
, но я предполагаю, что последние две ошибки похожи.
Мой совет - сделать одно из следующего:
1. Выбросить объекты DTO. Это хорошая идея, но они не служат реальной цели, если они только запутывают вас, или 2. Создайте интерфейсы DTO, которые вы реализуете на объектах модели. Все остальные классы и интерфейсы, насколько это возможно, относятся только к этим интерфейсам. Таким образом, вы все равно можете определить их в API и использовать их по своему усмотрению, но они не будут мешать вам. И вы всегда можете просто привести объект модели туда, где это необходимо. В качестве альтернативы,
3. Добавьте конструктор в DTO, который принимает объект модели в качестве параметра и позволяет DTO обернуть объект модели. И добавить ToModelObject
Функция DTO, которая позволит вам легко конвертировать в объект модели.
Я действительно думаю, что вы должны сначала сосредоточиться на том, чтобы заставить работать базовый контроллер, как ожидается, и только потом добавлять в DTO. Таким образом, вы сосредотачиваетесь на одном осложнении за раз.