.net core N-Layered Web Api, использующий автомапер для передачи DTO между контроллером и ошибками сервисных уровней

Я новичок в веб-API, и многоуровневая архитектура ниже - это структура всего моего проекта.

я хочу знать, как передать сущности от контроллера к сервису и снова вернуться от сервиса к контроллеру

ниже то, что я написал в контроллере

ниже то, что я написал в сервисе

ниже класс DTO

ниже приведены ошибки что я получил и запутался в конце концов, пожалуйста, спасите мой день

1 ответ

Решение

Здесь много чего не так. Я думаю, что они в основном происходят из-за путаницы между вашим DTO и модельными классами.

Так что все эти ошибки, потому что вы объявили ITodoService использовать / вернуть TodoItem экземпляры, но вы используете TodoItemDto вместо:

  1. TodoService.GetAll, TodoService.GetByid а также TodoService.Delete все требуют TodoItem на интерфейсе, но вы использовали TodoitemDto когда вы реализовали их в TodoService, (Три ошибки в строке 13 TodoService.cs).
  2. Вы вообще не возвращаете значение из TodoService.Delete, Возвращаемое значение должно быть TodoItemне TodoItemDto, (TodoService.csстрока 26)
  3. _dorepo.Delete() возвращает недействительным Вы не можете присвоить его переменной. Я не могу вам помочь, потому что я не знаю, что вы намеревались сделать. (TodoService.csстрока 29)
  4. Так как TodoService.GetAll неправильно определен для возврата TodoItemDto, значение от _dorepo.GetAll не может быть возвращено. Исправление состоит в том, чтобы изменить объявление функции для возврата TodoItem, как указано в пункте 1 выше. (TodoService.csстрока 37)

Вы не показываете код для TodoController, но я предполагаю, что последние две ошибки похожи.

Мой совет - сделать одно из следующего: 1. Выбросить объекты DTO. Это хорошая идея, но они не служат реальной цели, если они только запутывают вас, или 2. Создайте интерфейсы DTO, которые вы реализуете на объектах модели. Все остальные классы и интерфейсы, насколько это возможно, относятся только к этим интерфейсам. Таким образом, вы все равно можете определить их в API и использовать их по своему усмотрению, но они не будут мешать вам. И вы всегда можете просто привести объект модели туда, где это необходимо. В качестве альтернативы, 3. Добавьте конструктор в DTO, который принимает объект модели в качестве параметра и позволяет DTO обернуть объект модели. И добавить ToModelObject Функция DTO, которая позволит вам легко конвертировать в объект модели.

Я действительно думаю, что вы должны сначала сосредоточиться на том, чтобы заставить работать базовый контроллер, как ожидается, и только потом добавлять в DTO. Таким образом, вы сосредотачиваетесь на одном осложнении за раз.

Другие вопросы по тегам