我正在尝试实现一个通用存储库,但我遇到了困难。以下是我的对象模型的摘要。问题是具体的存储库“UserAccountRepositoryStub”将无法编译。错误是:
类型用户必须可转换为IRepository类型...
IRepostory:
public interface IRepository<T> where T : IEntity
{
...
}
抽象存储库:
public class AbstractRepository<T> where T : class, IEntity, IRepository<T> {...}
IUserAccountRepository:
public interface IUserAccountRepository
用户:
public class User : IEntity{...}
UserRepositoryStub(混凝土):
public class UserAccoutRepositoryStub : AbstractRepository<User>, IUserAccountRepository
答案 0 :(得分:5)
AbstractRepository<T>
的定义应该是
public class AbstractRepository<T> : IRepository<T> where T : class, IEntity {...}
因为您希望存储库实现IRepository<T>
而不是其中的对象,对吧?
答案 1 :(得分:1)
您的AbstractRepository
要求T
的类型为IRepository<T>
。你的意思是:
public class AbstractRepository<T> : IRepository<T> where T : class, IEntity, {...}
答案 2 :(得分:1)
在您的AbstractRepository上,您已将IRepository置于错误的位置。 “where”之后和“{...}”之前的所有内容都指定了通用约束。要指定继承,您需要将其放在where之前。
试试这个
public class AbstractRepository<T> : IRepository<T> where T : class, IEntity {...}