J'ai une méthode générique qui a deux paramètres génériques. J'ai essayé de compiler le code ci-dessous mais cela ne fonctionne pas. Est-ce une limitation .NET? Est-il possible d'avoir plusieurs contraintes pour différents paramètres?
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, TResponse : MyOtherClass
C'est possible, la syntaxe est légèrement fausse. Vous avez besoin de where
pour chaque contrainte plutôt que de les séparer par une virgule:
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass
where TResponse : MyOtherClass
En plus de la réponse principale de @LukeH avec un autre usage, nous pouvons utiliser plusieurs interfaces au lieu de classe. (Une classe et n nombre d'interfaces) comme ceci
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : MyClass, IMyOtherClass, IMyAnotherClass
ou
public TResponse Call<TResponse, TRequest>(TRequest request)
where TRequest : IMyClass,IMyOtherClass
En plus de la réponse principale de @LukeH, j'ai un problème avec l'injection de dépendance et il m'a fallu du temps pour résoudre ce problème. Il convient de partager, pour ceux qui font face au même problème:
public interface IBaseSupervisor<TEntity, TViewModel>
where TEntity : class
where TViewModel : class
C'est résolu de cette façon. dans les conteneurs/services, la clé est typeof et la virgule (,)
services.AddScoped(typeof(IBaseSupervisor<,>), typeof(BaseSupervisor<,>));
Ceci a été mentionné dans cette réponse .