Задача приведения <Product>к заданию <IProduct> - PullRequest
0 голосов
/ 04 мая 2020

У меня есть (netcoreapp3) API-приложение, которое связывается со второй (netstandard2.0) библиотекой классов для обслуживания асинхронных c запросов к базе данных. В этом примере Product реализует интерфейс IProduct.

При реализации поиска в базе данных требуется "получить" конкретный Product, но вернуть его IProduct, но компонент Task<T> вызывая ошибки компиляции:

    public Task<IProduct> GetSingleAsync(int id)
    {
        var query = "SELECT P.ID, P.Name FROM [Product] P WHERE P.ID = @ID";
        return QueryFirstOrDefaultAsync<Product>(query, new { ID = id });
    }

В частности, оператор возврата показывает:

Ошибка CS0029 Не удается неявно преобразовать тип 'System.Threading.Tasks.Task ' в 'System .Threading.Tasks.Task '

Я не знаю, должен ли я выполнять какое-либо "ковариантное" приведение во время выполнения?
И как это будет работать для GetAllAsync() метода, который может захотеть вернуть Task<IList<IProduct>>? Требуется ли создание второго массива и «приведение» каждого элемента?

В синхронной версии возврат Product как IProduct просто работает. Примечание: QueryFirstOrDefaultAsync<T> - это метод расширения, который создаст заполненный объект Product (в приведенном выше случае).

Спасибо.

...