Не уверен тип возвращаемого значения для моей реализации сервиса - PullRequest
0 голосов
/ 11 января 2019

У меня есть многоуровневое базовое веб-API 2.1, в котором есть 5 проектов. Данные для моих репозиториев с использованием шаблона репозитория. У помощников есть мои полезные занятия. Модели мои модели. Уровень Service содержит код для подключения к репозиториям. WebAPI - это фронт с контроллерами с маршрутизацией атрибутов Restful. Контроллер обращается к сервисному слою, который обращается к хранилищам данных с помощью помощников и моделей.

Это перезапись, и я нахожусь в процессе перемещения кода контроллера на уровень обслуживания, который имеет интерфейсы. У большинства сигнатур методов есть Задача, и когда я перемещаю их назад, я не уверен, как вернуть данные, потому что, когда они были в контроллере, они возвращали Контент (результат).

логика контроллера: public async Task<IActionResult> ResourceLoginByUserName([FromBody] ResourceLogin obj)

Интерфейс для сервисного уровня: Task<IActionResult> ResourceLoginByUserName(ResourceLogin obj, HttpRequest Request, string connectionString);

Код уровня обслуживания: public Task<string> ResourceLoginByUserName(ResourceLogin obj, HttpRequest Request, string connectionString) { //This works as a return type of Task<string> but not IActionResult return Task.FromResult (); }

If I put IActionresult on the Service layer signature I get the error: Cannot implicitly convert type System.Threading.Tasks.Task<string> to System.Threading.Tasks.Task<Microsoft.AspNetCore.Mvc.IActionResult>.

Мне просто нужно знать правильный шаблон для этого, пожалуйста? ТИА

1 Ответ

0 голосов
/ 11 января 2019

Тип для параметра универсального типа Task<T> должен быть просто типом объекта, который должен возвращать метод. Я не совсем уверен, в чем путаница. Вы на самом деле не предоставили никакой информации о том, с какими типами вы работаете, но в случае чего-то вроде ResourceLoginByUserName вы, вероятно, захотите вернуть какой-то объект со статусом успеха / неудачи, токен доступа и список ошибок, если они были. Например:

public class LoginResult
{
    public bool Succeeded { get; set; }
    public string AccessToken { get; set; }
    public List<string> Errors { get; set; } = new List<string>();
}

В этом случае возврат будет Task<LoginResult>.

По сути, вам просто нужно создать класс, который моделирует информацию, которая, по вашему мнению, вам может понадобиться при вызове метода, и затем вернуть ее. В ситуации, когда вы что-то извлекаете, вы можете либо вернуть объект напрямую:

public Task<Foo> GetFoo(int id)

Или вы все еще можете создать специализированный класс результатов для предоставления дополнительной информации:

public class GetFooResult
{
    public bool Succeeded { get; set; }
    public Foo Foo { get; set; }
    public List<string> Errors { get; set; }
}

Это зависит только от вас и от того, что вам нужно в вашем приложении. Я скажу, что лучше следовать шаблону для простоты. Например, вы всегда можете вернуть какой-то класс «результата», и тогда вы поймете, что всегда можете проверить result.Succeeded на общее условие «пройти / не пройти».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...