【发布时间】:2013-12-10 12:49:01
【问题描述】:
我在我的项目中使用存储库模式。每个组件都有一个 Bll 类。
我想创建一个基础 bll 类,子 Bll 类可以在没有相同的 Repository Curd 方法的情况下工作。
但似乎“无法将 ..DriverRepository 转换为目标类型 ...Repository IEntity>”
语言:c#
public class Repository<TEntity> : IRepository<TEntity> where TEntity : class , IEntity
{
protected string ConnectionStringName;
protected IDatabase Db;
public Repository(string connStringName)
{
ConnectionStringName = connStringName;
Db = new Database(ConnectionStringName);
}
public Repository()
{
ConnectionStringName = "DefaultConnection";
Db = new Database(ConnectionStringName);
}
}
public abstract class BaseBll
{
protected Repository<IEntity> DefaultRepository;
protected BaseBll(Repository<IEntity> repository)
{
_defaultRepository = repository;
}
protected virtual List<IEntity> GetAll()
{
return DefaultRepository.GetAll();
}
}
public class DriverRepository : Repository<Driver>
{
public Driver GetDriverByLicenseNumber(string licenseNumber)
{
return Db.SingleOrDefault<Driver>("where LicenseNumber = @0", licenseNumber);
}
}
public class DriverBll
{
public DriverBll()
{
DefaultRepository = new DriverRepository();
//***Throw the Cannot convert ... to ... Error. Why?****
}
}
但是……
【问题讨论】:
-
什么是
MyRepository? -
在DriverRepo中创建构造函数,传递连接字符串并调用基构造函数传递连接字符串?
-
我看到“受保护的 MyRepository DefaultRepository;”。你能发布 MyRepository 类代码吗?
-
对不起 MyRepository 。这只是一个测试。不管我用不用,不能转换是存在的。
-
虽然你的代码不是这样,但我猜DriverBll必须继承自BaseBll。然后,您必须确保 Driver 类继承自 IEntity。是这样吗?