IOC - No parameterless constructor was defined for this object

0

I am doing a project and they are separated in layers, I can call DDD. However I have the following error:

No parameterless constructor has been defined for this object.

I'm using Ioc, here's how I'm doing:

public class NinjectWebCommon
{
    private static readonly Bootstrapper bootstrapper = new Bootstrapper();

    public static void Start()
    {
        DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
        DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
        bootstrapper.Initialize(CreateKernel);


    }

    public static void Stop()
    {
        bootstrapper.ShutDown();
    }

    private static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        try
        {
            kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
            kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
            ServiceLocator.SetLocatorProvider(() => new NinjectServiceLocator(kernel));
            RegisterServices(kernel);
              return kernel;
        }
        catch
        {
            kernel.Dispose();
            throw;
        }
    }

    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind(typeof(IAppServiceBase<>)).To(typeof(AppServiceBase<>));
        kernel.Bind<IConhecimentoAppService>().To<ConhecimentoAppService>();
        kernel.Bind<IDadosBancariosAppService>().To<DadosBancariosAppService>();
        kernel.Bind<IDisponibilidadeAppService>().To<DisponibilidadeAppService>();
        kernel.Bind<IHorarioAppService>().To<HorarioAppService>();
        kernel.Bind<IPessoaAppService>().To<PessoaAppService>();
        kernel.Bind<IPessoaConhecimentoAppService>().To<PessoaConhecimentoAppService>();
        kernel.Bind<IPessoaDisponibilidadeAppService>().To<PessoaDisponibilidadeAppService>();
        kernel.Bind<IPessoaHorarioAppService>().To<PessoaHorarioAppService>();



        kernel.Bind(typeof(IServiceBase<>)).To(typeof(ServiceBase<>));
        kernel.Bind<IConhecimentoService>().To<ConhecimentoService>();
        kernel.Bind<IDadosBancariosService>().To<DadosBancariosService>();
        kernel.Bind<IDisponibilidadeService>().To<DisponibilidadeService>();
        kernel.Bind<IHorarioService>().To<HorarioService>();
        kernel.Bind<IPessoaService>().To<PessoaService>();
        kernel.Bind<IPessoaConhecimentoService>().To<PessoaConhecimentoService>();
        kernel.Bind<IPessoaDisponibilidadeService>().To<PessoaDisponibilidadeService>();
        kernel.Bind<IPessoaHorarioService>().To<PessoaHorarioService>();


        kernel.Bind(typeof(IRepositoryBase<>)).To(typeof(RespositoryBase<>));
        kernel.Bind<IConhecimentoRepository>().To<ConhecimentoRepository>();
        kernel.Bind<IDadosBancariosRepository>().To<DadosBancariosRepository>();
        kernel.Bind<IDisponibilidadeRepository>().To<DisponibilidadeRepository>();
        kernel.Bind<IHorarioRepository>().To<HorarioRepository>();
        kernel.Bind<IPessoaRepository>().To<PessoaRepository>();
        kernel.Bind<IPessoaConhecimentoRepository>().To<PessoaConhecimentoRepository>();
        kernel.Bind<IPessoaDisponibilidadeRepository>().To<PessoaDisponibilidadeRepository>();
        kernel.Bind<IPessoaHorarioRepository>().To<PessoaHorarioRepository>();
    }
}

Controller is done like this:

public class PessoaController : Controller
{
    private readonly IPessoaAppService _pessoaApp;
    private readonly IConhecimentoAppService _conhecimentoApp;



    public PessoaController(IPessoaAppService pessoaApp, IConhecimentoAppService conhecimentoApp)
    {
        _pessoaApp = pessoaApp;
        _conhecimentoApp = conhecimentoApp;

    }

 // GET Pessoa/GetPessoa
    public JsonResult GetPessoa()
    {
        try
        {

           var pessoaViewModel = Mapper.Map<IEnumerable<Pessoa>, IEnumerable<PessoaViewModel>>(_pessoaApp.GetAll());

            List<PessoaViewModel> pessoas = pessoaViewModel.ToList();

            return Json(pessoas, JsonRequestBehavior.AllowGet);


        }
        catch (Exception ex)
        {

            throw;
        }

    }
}
    
asked by anonymous 11.05.2018 / 03:48

1 answer

0

Good morning Tatiane.

I think the error is occurring at the moment that you are solving the PessoaController object, correct?

If this is the case, what is happening is that the PersonController class has only one constructor, and it has parameters (IPessoaAppService personApp, AcknowledgmentAppServiceApp knowledgeApp). However, when ninject is creating a new instance of that object (PersonController) it does not know which values to pass to the constructor, so it looks for a constructor with no parameters and it does not exist in the object.

To solve this there are two ways:

  • Create a parameterless constructor
  • Inform ninject which parameters should be passed to the constructor. More information on this [post] [1]
  • 11.05.2018 / 14:19