【发布时间】:2018-03-25 16:30:40
【问题描述】:
我有一个我希望用来执行有效性检查的接口,就像将一个 id 传递给一个方法一样简单,无论该实体是否存在,它都应该返回 true 或 false。我不想为我的每个存储库都有这个实现,所以我创建了一个单独的接口IValidityCheck<T> where T: DbSet<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
【问题讨论】:
-
怎么可能是 DbSet
?我认为您需要另一个通用变量 -
你的定义就像一个无限递归循环。
public interface IValidityCheck<T, I> where T: DbSet<I>和services.AddTransient<IValidityCheck<DbSet<School>, School>, ValidityCheck<DbSet<School>,School>>();怎么样
标签: c# generics dependency-injection interface .net-core