通用存储库 - IRepository <t>或IRepository </t>

时间:2009-12-05 20:50:16

标签: c# linq generics repository

我已经看到了两种创建通用存储库的方法。这两种方法之间有什么区别(利弊)? 因为我对

之间的区别感兴趣,请对方法有所不同
 public interface IRepository<T> where T : class

 public interface IRepository : IDisposable

功能,灵活性,单元测试有什么不同......?我会得到或失去什么? 它们在依赖注入框架中的注册方式有何不同?

选项1

 public interface IRepository<T> where T : class
 {
       T Get(object id);
       void Attach(T entity);
       IQueryable<T> GetAll();
       void Insert(T entity);
       void Delete(T entity);
       void SubmitChanges();
 }

选项2

 public interface IRepository : IDisposable
    {
        IQueryable<T> GetAll<T>();
        void Delete<T>(T entity);
        void Add<T>(T entity);
        void SaveChanges();
        bool IsDisposed();
    }

1 个答案:

答案 0 :(得分:27)

最大的区别是IRepository<T>绑定到单个类型,而IRepository可能绑定到多个类型。哪一个适合高度依赖于您的特定情况。

一般来说,我发现IRepository<T>更有用。在使用时,我非常清楚IRepository<T>的内容是什么(T)。另一方面,从给定的IRepository内部包含的内容来看,并不清楚。

如果我必须存储多种类型的对象,我通常会创建IRepository<T>个实例的地图。例如:Dictionary<T,IRepository<T>>