我已经在Repository Pattern
应用程序中实现了Asp.Net Core
。我将通用类用于基础存储库:
public class GenericRepository<T> : IDisposable, IGenericRepository<T>, IGenericRepositoryAsync<T>
where T : BaseEntity, new()
{
// Standard methods like: GetById, Update, Delete etc.
}
我在Domain
之后有特定的存储库:FeedRepository
,UserRepository
。还有Entities
:Post
,ApplicationUser
。
我的FeedRepository
如下:
public class FeedRepository : GenericRepository<Post>, IFeedRepository
{
// Specific methods for Feed
}
问题是我需要对所有其他存储库使用GenericRepository
,但是我的ApplicationUser
实体扩展了IdentityUser
而不是BaseEntity
。
有没有办法为GenericRepository提供2种可能的类型? T
有时是BaseEntity
有时是IdentityUser
吗?
答案 0 :(得分:2)
从理论上讲,您可以这样做:
public class GenericRepository<T, TBase> : IDisposable, IGenericRepository<T>, IGenericRepositoryAsync<T>
where T : TBase, new()
{
// Standard methods like: GetById, Update, Delete etc.
}
但是我不清楚会完成什么。通常,当您使用通用条件时,这是因为类中的某些人知道如何以某种特殊方式与条件(BaseEntity
)中的类型进行交互。
如果不是这种情况,那么该标准就没有真正的目的,您应该删除它。
如果是 情况,则可能应该创建一个单独的存储库类型。例如,您可以有一个GenericEntityRepository
,然后有一个单独的IdentityUserRepository
或类似的东西。