我有以下内容:
public class TestService : BaseService, IDisposable
{
public TestService(IRepositoryProvider repositoryProvider)
{
}
public IRepository<Exam> Exams { get { return GetStandardRepo<Exam>(); } }
}
和
public class BaseService : IDisposable
{
public BaseService(IRepositoryProvider repositoryProvider)
{
CreateDbContext();
repositoryProvider.DbContext = DbContext;
RepositoryProvider = repositoryProvider;
}
}
有人能告诉我为什么第一堂课上有一个错误,说“基础服务没有采用零参数的构造函数”吗?
答案 0 :(得分:7)
您需要调用基础构造函数:
public TestService(IRepositoryProvider repositoryProvider) : base(repositoryProvider)
{
}
答案 1 :(得分:2)
您需要通过链接将IRepositoryProvider
传递给BaseService
构造函数:
public class TestService : BaseService, IDisposable
{
public TestService(IRepositoryProvider repositoryProvider) :
base(repositoryProvider)
{
}
public IRepository<Exam> Exams { get { return GetStandardRepo<Exam>(); } }
}
由于您尚未这样做,因此会将其解释为尝试使用无参数构造函数初始化BaseService
。
答案 2 :(得分:1)
您需要调用BaseService的基础构造函数。像这样改变你的实现:
public class TestService : BaseService, IDisposable
{
public TestService(IRepositoryProvider repositoryProvider)
: base(repositoryProvider)
{
}
public IRepository<Exam> Exams { get { return GetStandardRepo<Exam>(); } }
}
答案 3 :(得分:1)
原因是基类不包含参数less构造函数,即带有0个参数的构造函数。
当调用此派生类的构造函数时,它将调用基类的参数less构造函数,因为没有显式调用基类的构造函数,并且因为基类中没有参数较少的构造函数发生错误。
答案 4 :(得分:0)
因为TestService
中的构造函数会尝试在没有参数的情况下调用BaseService
。
修正:
public TestService(IRepositoryProvider repositoryProvider): base(repositoryProvider){ }