创建通用类C#

时间:2013-01-24 20:26:57

标签: c# c#-4.0 generics

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

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

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

2 个答案:

答案 0 :(得分:0)

@NickBray击中了头部的钉子。无论实际的具体存储库实现有多么不同或类似,示例中的DAL类都应该通过接口公开存储库实例。

理想情况下,暴露的界面将被声明为这样。

interface IUserProfileRepository : IEntityRepository<IUserProfile>
{
}

这样您就可以根据需要添加自定义IUserProfile方法。虽然IEntityRepository界面会定义常用方法AddUpdateRemove和各种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);
       }
    }