我在项目中使用Repository模式。每个组件都有一个Bll类。
我想创建一个基本的bll类,子Bll类可以在没有相同的Repository Curd方法的情况下工作。
语言: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?****
}
}
但是...
答案 0 :(得分:1)
Repository
中没有零参数构造函数,但DriverRepository
继承了它。因为Repository
中没有零参数构造函数,当DriverRepository
尝试创建自身时,它没有可以在Repository
上调用的构造函数。您需要从Repository(connectionString)
的构造函数中调用DriverRepository
构造函数。
public DriverRepository(string connectionString) : base(connectionString)
{
...
}
或
public DriverRepository() : base("YourConnectionString")
{
...
}
编辑:澄清。
首先,在此代码示例中,DriverBll
不会从BaseBll
延伸,因此它不知道DefaultRepository
属性。其次,Driver
必须实施IEntity
。