Общий метод с несколькими ограничениями

У меня есть общий метод, который имеет два общих параметра. Я попытался скомпилировать код ниже, но он не работает. Это ограничение .NET? Возможно ли иметь несколько ограничений для разных параметров?

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, TResponse : MyOtherClass

Ответ 1

Это можно сделать, вы просто немного ошиблись в синтаксисе. Вам нужно where для каждого ограничения, а не разделять их запятой:

public TResponse Call<TResponse, TRequest>(TRequest request)
    where TRequest : MyClass
    where TResponse : MyOtherClass

Ответ 2

В дополнение к основному ответу @LukeH, у меня есть проблема с внедрением зависимостей, и мне потребовалось некоторое время, чтобы это исправить. Стоит поделиться, для тех, кто сталкивается с такой же проблемой:

public interface IBaseSupervisor<TEntity, TViewModel> 
    where TEntity : class
    where TViewModel : class

Это решается таким образом. в контейнерах/сервисах ключ typeof и запятая (,)

services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));

Это было упомянуто в этом ответе.

Ответ 3

В дополнение к основному ответу @LukeH с другим использованием, мы можем использовать несколько интерфейсов вместо класса. (Один класс и n интерфейсов)

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : MyClass, IMyOtherClass, IMyAnotherClass

или же

public TResponse Call<TResponse, TRequest>(TRequest request)
  where TRequest : IMyClass,IMyOtherClass