c# - 没有给出与所需形式参数“映射器”相对应的参数
问题描述
我确定这是一个基本的 OOP 问题,但我正在尝试使用 ContactsRepository 作为基类并在类 OrganizationRepository 中使用其方法,但出现错误:没有给出与所需的形式参数“映射器”相对应的参数
//OrganizationRepository 类
public class OrganizationRepository : ContactsRepository, IOrganizationRepository
{
#region fields
private readonly GreyWorldDB_DevEntities _context;
private readonly IMapper _mapper;
private readonly UserManagement _userManagement;
#endregion
#region Ctor
public OrganizationRepository(IMapper mapper, GreyWorldDB_DevEntities context, UserManagement userManagement)
{
_mapper = mapper;
_context = context;
_userManagement = userManagement;
}
#endregion
#region Actions
//Action methods
#endregion
#region Private Methods
//private methods
#endregion
}
//ContactsRepository 类
public class ContactsRepository : IContactsRepository
{
#region fields
private readonly GreyWorldDB_DevEntities _context;
private readonly IMapper _mapper;
private readonly UserManagement _userManagement;
#endregion
#region Ctor
public ContactsRepository(IMapper mapper, GreyWorldDB_DevEntities context, UserManagement userManagement)
{
_mapper = mapper;
_context = context;
_userManagement = userManagement;
}
#endregion
#region Actions
//Action methods
#endregion
#region Private Methods
#endregion
}
没有给出与“ContactsRepository.ContactsRepository(IMapper, GreyWorldDB_DevEntities, UserManagement)”所需的形式参数“mapper”相对应的参数
解决方案
创建派生类的实例时,会在派生类的构造函数运行之前调用基类的构造函数。类之间的构造函数不必相同,但如果基类的构造函数不是无参数的,您仍然需要将它需要的参数传递给它:
public class BaseClass
{
public BaseClass(string name)
{
}
}
public class DerivedClass: BaseClass
{
public DerivedClass() : base("test")
{
}
}
另外,我不确定您为什么要在基类和派生类中重新定义相同的私有字段。相反,您应该将它们protected
放在基类中,让基类构造函数填充它们,然后简单地从派生类传递它们。您的代码最终应该看起来像这样:
public class ContactsRepository : IContactsRepository
{
protected readonly GreyWorldDB_DevEntities _context;
protected readonly IMapper _mapper;
protected readonly UserManagement _userManagement;
public ContactsRepository(IMapper mapper, GreyWorldDB_DevEntities context, UserManagement userManagement)
{
_mapper = mapper;
_context = context;
_userManagement = userManagement;
}
}
public class OrganizationRepository : ContactsRepository, IOrganizationRepository
{
public OrganizationRepository(IMapper mapper, GreyWorldDB_DevEntities context, UserManagement userManagement)
: base(mapper, context, userManagement)
{
}
}
推荐阅读
- python - Django注册表单中不区分大小写的用户名
- android - 如何在颤振中使用奖励视频听众?
- android - 在 WeakReference 上调用 clear() 不起作用
- java - 删除 thumbs.db
- c# - 如何在我的 LINQ 查询中包含第二个表中的列
- python - TensorFlow 每通道量化
- c++ - C++ windows.h 写入文件函数
- ssl - 如何使用服务器端配置(Nginx)强制浏览器获取新的 SSL 证书而不是旧的证书?
- java - 在 Observable 中超时时发出项目
- php - PHP - 需要帮助完成 Google Sheets API 请求