【发布时间】:2019-10-14 17:32:59
【问题描述】:
我有 EntityBase 抽象类,通常我的所有实体都继承自该类。它采用指定 Id 属性类型的泛型类型(例如 int 或 Guid)。 EntityBase 还包含一些逻辑来确定实体之间的相等性。
public abstract class EntityBase<T>
{
public T Id { get; private set; }
...
}
在我的 .Net Core 2.2 Web 应用程序中,我使用的是 Asp.Net Identity,并且我有一个名为 ApplicationUser 的实体,它必须从 Microsoft.AspNetCore.Identity.IdentityUser 继承。因为不能从多个基类继承,所以不能从EntityBase继承。
所以,我创建了一个名为 IEntity 的接口,EntityBase 和 ApplicationUser 都实现了该接口
public interface IEntity<T>
{
T Id { get; }
}
我有一个 IRepository 接口,它的泛型类型必须是实体。我不在乎该实体上的 Id 类型是什么。我只想说 TEntity 只需要是一些 IEntity,我不在乎它是 IEntity 还是 IEntity。像下面这样的东西。这可能吗?
public interface IRepository<TEntity> where TEntity : IEntity
{
}
【问题讨论】:
-
IEntity 只是不存在的东西,你定义了 IEntity
这意味着,你总是必须提供一个类型参数。如果你想强制你的 TEntity 必须实现 IEntity ,你只需要附加 ,但是要定义 T 是什么,你必须有接口 IRepository
标签: c# generics inheritance asp.net-identity