我正在为一个实体列表创建一个存储库,我应该多次重复同一个类,唯一的区别是类型类型..有没有办法让它通用?
这应该很容易,当然我不知道如何制作这个通用:
private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();
我正在重复这个课程:
public class UserProfileRepository : IEntityRepository<IUserProfile>
{
private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();
public IUserProfile[] GetAll()
{
return _rep.GetAll();
}
public IUserProfile GetById(int id)
{
return _rep.GetById(id);
}
public IQueryable<IUserProfile> Query(Expression<Func<IUserProfile, bool>> filter)
{
return _rep.Query(filter);
}
}
答案 0 :(得分:0)
DAL
类都应该通过接口公开存储库实例。
理想情况下,暴露的界面将被声明为这样。
interface IUserProfileRepository : IEntityRepository<IUserProfile>
{
}
这样您就可以根据需要添加自定义IUserProfile
方法。虽然IEntityRepository
界面会定义常用方法Add
,Update
,Remove
和各种QueryXXX
方法。
答案 1 :(得分:0)
我希望这个例子对你有帮助。如果我正确理解了您的问题,您希望基于“IEntityRepository”接口使您的存储库具有可生成性。
尝试这样的事情:
public class UserProfileRepository<TUserProfile> : IEntityRepository<TUserProfile> where TUserProfile : IUserProfile
{
private Namespace.DAL.UserProfileRepository _rep = new Namespace.DAL.UserProfileRepository();
public TUserProfile[] GetAll()
{
return _rep.GetAll();
}
public TUserProfile GetById(int id)
{
return _rep.GetById(id);
}
public IQueryable<TUserProfile> Query(Expression<Func<TUserProfile, bool>> filter)
{
return _rep.Query(filter);
}
}