我有一个接口我希望用来执行有效性检查,就像传入一个id到一个方法一样简单,它应该返回true或false,无论该实体是否存在。我不想为我的每个存储库都实现这个实现,所以我创建了一个单独的接口IValidityCheck<T> where T: DbSet<T>
,如下所示。如何使用依赖注入与通用数据集<T>
public interface IValidityCheck<T> where T: DbSet<T>
{
bool IsValid(Guid id, T entitySet);
}
现在在我的.net核心应用程序中,我正在尝试为此添加依赖项。我有类似的东西。
services.AddTransient<IValidityCheck<DbSet<School>>, ValidityCheck<DbSet<School>>>();
,但我得到像
类型错误 “Microsoft.EntityFrameworkCore.DbSet” 不能用作在通用类型的类型参数“T”或方法 “IValidityCheck”。有一个从 “Microsoft.EntityFrameworkCore.DbSet” 到 “Microsoft.EntityFrameworkCore.DbSet>”
我知道将其更改为约束,以where T: class
将使它更容易的隐式引用转换,但我想的约束具体到DbSet
T怎么可能是DbSet?我认为你需要另一个通用变量 –
你的定义就像一个无限递归循环。 'public interface IValidityCheck where T:DbSet 'and'services.AddTransient ,School>,ValidityCheck ,School >>();' –