IOC - No constructor without parameters has been defined for this object

Asked

Viewed 441 times

1

I’m doing a project and they’re layered apart, I call it DDD. But I’m making the following mistake:

No constructor without parameters has been defined for this object.

I’m using Ioc, follow below as 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 made 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;
        }

    }
}

1 answer

0

Good morning Tatiane.

I believe the error is occurring at the moment you are solving the Personal object, correct?

If this is the case, what is occurring is that the Personal Controller class has only one constructor, and the same has parameters (Ipessoaappservice personal However, the moment the ninject is creating a new instance of that object (Personal controller) it does not know what values to pass to the constructor, then it looks for a constructor without parameters and this does not exist in the object.

To solve this there are two ways:

  1. Create a constructor without parameters
  2. inform ninject which parameters should be passed to the constructor. More information on this [post][1]

Browser other questions tagged

You are not signed in. Login or sign up in order to post.