【发布时间】:2010-02-16 20:52:03
【问题描述】:
在决定使用业务线存储库之前,我正在考虑实施一个针对每个对象的存储库(例如,个人存储库、状态存储库等),但我仍然对传入 ID(标识符)有疑问使用泛型类型。
简而言之,一个人可能有一个 GUID 标识符,一个州/县可能有一个 int 标识符,等等。考虑到这一点,我如何传递一个指定 ID 的类型,呃,泛型的类型被传入?
这是我在界面上的尝试:
public interface IRepository<T, TID> where T : class where TID : Type
{
T Get(TID id);
IList<T> GetAll();
void Update(T entity);
void Insert(T entity);
void Delete(TID id);
}
您可以看到 T 是类(Person、State 等),我的意图是让 TID 成为用于标识符的类型,即查看 T Get(TID id)。
这会导致编译错误:“类型'string'不能用作泛型类型或方法'DumpWebApp.IRepository'中的类型参数'TID'。没有从'string'到'的隐式引用转换System.Type'。”
我猜另一种方法是将实际元素传递给 Get 和 Delete 方法,但这似乎有点笨拙。
感谢您的任何建议 - 顺便说一下,GetAll() 是否可以接受返回 IList?为什么不是 IQueryable 或 T[] ?
迈克·K。
【问题讨论】:
标签: c# generics repository