Sam
Sam

Reputation: 35

The current type is an interface and could not be constructed. Are you missing type mapping?

I am trying to start a new web project and I am new to asp.net mvc. Everytime I debug the following code, the error appears stating

the current type, BBNepal.Repository.Interface.IUnitOfWork, is an interface and cannot be constructed.

Are you missing a type mapping?' Where did I go wrong?

This is my controller

public class RegisterController : Controller
{
        private IRegisterService registerService;

        public RegisterController(IRegisterService _registerService)
        {
            registerService = _registerService;
        }
        // GET: Register
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(RegisterDTO registerDTO)
        {
            try
            {
                bool isSaved;
                if (registerDTO.Id == 0)
                    isSaved = registerService.Create(registerDTO);
                else
                    return View();

            }

This is my service layer

 public interface IRegisterService
{
    bool Create(RegisterDTO registerDTO);
}
#endregion

#region Implementation
public class RegisterService : IRegisterService
{
    private IUnitOfWork unitOfWork;

    public RegisterService(IUnitOfWork _unitOfWork)
    {
        unitOfWork = _unitOfWork ?? new UnitOfWork();
    }

    public bool Create(RegisterDTO registerDTO)
    {
        Register register = registerDTO.Convert();
        unitOfWork.RegisterRepository.Insert(register);
        unitOfWork.Save();
        return true;
    }
}

This is my interfaced repository

 public interface IUnitOfWork
{
    #region Core Method
    int Save();
    Task<int> SaveAsync();

    #endregion

    IRepository<Register> RegisterRepository { get; }
}

This is my repository

private IRepository<Register> _registerRepository;
    public IRepository<Register> RegisterRepository
    {   
        get
        {
            return _registerRepository ?? (_registerRepository = new RepositoryBase<Register>(_context));
        }
    }

My DI registrations are:

public static void RegisterTypes(IUnityContainer container) 
{ 
    container.RegisterType<IRegisterService, RegisterService>(); 
    DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
}

Upvotes: 2

Views: 615

Answers (1)

Nisarg Shah
Nisarg Shah

Reputation: 14541

You need to update the registrations, and include one for IUnitOfWork as it is passed into the constructor of class RegisterService.

It should be something like:

public static void RegisterTypes(IUnityContainer container) 
{ 
    container.RegisterType<IRegisterService, RegisterService>(); 
    container.RegisterType<IUnitOfWork, UnitOfWork>(); 
    DependencyResolver.SetResolver(new UnityDependencyResolver(container)); 
}

Upvotes: 1

Related Questions