【问题标题】:There is no argument given that corresponds to the required formal parameter 'mapper' [duplicate]没有给出与所需形式参数“mapper”相对应的参数 [重复]
【发布时间】:2018-11-30 05:47:04
【问题描述】:

我确定这是一个基本的 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”相对应的参数

【问题讨论】:

    标签: c# oop repository-pattern


    【解决方案1】:

    当您创建派生类的实例时,会在派生类的构造函数运行之前调用基类的构造函数。类之间的构造函数不必相同,但如果基类的构造函数不是无参数的,您仍然需要将它需要的参数传递给它:

    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)
        {
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 2019-08-09
      相关资源
      最近更新 更多