2

我正在为实体列表开发一个存储库,我应该多次重复同一个类,唯一的区别是类型类型..有没有办法让它通用?

它应该很容易,当然我不知道如何使这个通用:

 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);
   }
}
4

2 回答 2

0

@NickBray 一针见血。无论实际的具体存储库实现有多么不同或相似DAL,您的示例中的类都应该通过接口公开存储库实例。

理想情况下,公开的接口将被声明为这样。

interface IUserProfileRepository : IEntityRepository<IUserProfile>
{
}

这样,您可以IUserProfile根据需要添加自定义方法。而IEntityRepository接口将定义常用方法Add、、UpdateRemove各种QueryXXX方法。

于 2013-01-24T20:58:05.183 回答
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);
       }
    }

于 2013-01-24T22:12:07.900 回答