我找不到类似的问题,但如果我错过了,请随时重定向我。我正在尝试熟悉存储库模式。
我会给你一个我试图不成功地工作的代码的例子。这些是代表我正在使用的实体的类和接口。
public class AbsObj
{
public string Code { get; set; }
}
public interface IAbsObj
{
bool Save();
}
public class User : AbsObj
{
public string Language{get; set;}
}
public class DbUser : User, IAbsObj
{
public bool Save()
{
return true;
}
}
然后到存储库接口
public interface IRepository<T>
{
void Add(T value);
void Update(T value);
void Delete(T value);
}
通用存储库
public class Repository<T> : IRepository<T> where T : AbsObj, IAbsObj
{
protected List<T> _lst;
public Repository()
{
_lst = new List<T>();
}
public void Add(T value)
{
}
public void Update(T value)
{
}
public void Delete(T value)
{
}
public bool Save()
{
for (int i = 0; i < _lst.Count; i++)
{
_lst[i].Save();
}
return true;
}
}
然后是一个更具体的存储库,它应该处理从数据库加载用户:
public class UserRepository<T> : Repository<T> where T : AbsObj, IAbsObj
{
public void Load()
{
DbUser us = new DbUser();
us.Code = "Cod";
us.Language = "IT";
_lst.Add(us);
}
}
我创建 DBUser 类只是为了将来可以自由创建 XMLUser 来处理不同类型的保存。它继承自 User,而 User 又继承自 AbsObj。它实现了 IAbsObj。尽管如此,当我尝试将创建的 DbUser 对象添加到列表时出现编译时错误,指出不可能从 DBUser 转换为 T。鉴于我认为这是可能的约束:我在这里缺少什么?提前感谢您的帮助!