J'ai une interface que je souhaite utiliser pour effectuer une vérification de validité, aussi simple que de passer un identifiant dans une méthode et il devrait retourner vrai ou faux si cette entité existe. Je ne veux pas avoir cette implémentation pour chacun de mes dépôts, j'ai donc créé une interface distincte IValidityCheck<T> where T: DbSet<T>
comme indiqué ci-dessous.Comment utiliser injection de dépendance avec dbset générique <T>
public interface IValidityCheck<T> where T: DbSet<T>
{
bool IsValid(Guid id, T entitySet);
}
Maintenant dans mon application de base de .net, j'essaye d'ajouter la dépendance pour ceci. J'ai quelque chose comme.
services.AddTransient<IValidityCheck<DbSet<School>>, ValidityCheck<DbSet<School>>>();
mais je reçois une erreur comme
Le type 'Microsoft.EntityFrameworkCore.DbSet' ne peut pas être utilisé comme paramètre de type 'T' dans le type générique ou méthode 'IValidityCheck'. Il n'y a pas de conversion de référence implicite de « Microsoft.EntityFrameworkCore.DbSet » à « Microsoft.EntityFrameworkCore.DbSet> »
Je sais changer à la contrainte de where T: class
sera plus facile, mais je veux la contrainte être spécifique à DbSet
Comment T peut être un DbSet? Je pense que vous avez besoin d'une autre variable générique –
Votre définition est comme une boucle récursive infinie. Que diriez-vous 'l'interface publique IValidityCheck où T: DbSet ' et 'services.AddTransient , école>, ValidityCheck , école >>();' –