The number of generic arguments provided is not equal to the aridity of the generic type definition. Parameter name: instantiation

Asked

Viewed 154 times

1

I am having a problem developing an application in Asp.net MVC with IOC, Automapper and all other screens work perfectly, just not that of Drivers. couldn’t identify the mistake, could you help me? Follow the controllers, and the other classes, if you need any more let me know.

    public class MotoristaController : Controller
    {
        private readonly IMotoristaAppService _motoristaApp;
        private readonly IEstadoAppService _estadoApp;
        private readonly ICidadeAppService _cidadeApp;
        private readonly IEnderecoAppService _enderecoApp;

        public MotoristaController(
            IMotoristaAppService motoristaApp, 
            IEstadoAppService estadoApp, 
            ICidadeAppService cidadeApp, 
            IEnderecoAppService enderecoApp
            )
        {
            _motoristaApp = motoristaApp;
            _estadoApp = estadoApp;
            _cidadeApp = cidadeApp;
            _enderecoApp = enderecoApp;
        }
        // GET: Motorista
        public ActionResult Index(string pesquisa, int page = 0)
        {
            var motoristaViewModel = _motoristaApp.ObterClientesGrid(page * 5, pesquisa);
            ViewBag.PaginaAtual = page;
            ViewBag.Pesquisa = pesquisa;
            ViewBag.TotalRegistros = _motoristaApp.ObterTotalRegistros(pesquisa);
            return View(motoristaViewModel);
        }

        // GET: Motorista/Details/5
        public ActionResult Details(Guid id)
        {
            var motoristaViewModel = _motoristaApp.GetById(id);

            return View(motoristaViewModel);

        }

        // GET: Motorista/Create
        public ActionResult Create()
        {
            ViewBag.EstadoId = new SelectList(_estadoApp.GetAll().OrderBy(e => e.Nome), "EstadoId", "Nome");
            ViewBag.CidadeId = new SelectList(_cidadeApp.GetAll().OrderBy(c => c.Nome), "CidadeId", "Nome");
            return View();
        }

        // POST: Motorista/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(MotoristaEnderecoViewModel motoristaViewModel)
        {
            ViewBag.EstadoId = new SelectList(_estadoApp.GetAll().OrderBy(e => e.Nome), "EstadoId", "Nome", motoristaViewModel.EstadoId);
            ViewBag.CidadeId = new SelectList(_cidadeApp.GetAll().OrderBy(c => c.Nome), "CidadeId", "Nome", motoristaViewModel.CidadeId);

            if (ModelState.IsValid)
            {
                var result = _motoristaApp.Add(motoristaViewModel);

                if (!result.IsValid)
                {
                    foreach (var validationAppError in result.Erros)
                    {
                        ModelState.AddModelError(string.Empty, validationAppError.Message);
                    }
                    return View(motoristaViewModel);
                }

                return RedirectToAction("Index");
            }

            return View(motoristaViewModel);
        }

        // GET: Motorista/Edit/5
        public ActionResult Edit(Guid id)
        {
            var motoristaApp = _motoristaApp.GetById(id);

            return View(motoristaApp);
        }

        // POST: Motorista/Edit/5
        [HttpPost]
        public ActionResult Edit(MotoristaViewModel motorista)
        {
            if (ModelState.IsValid)
            {
                _motoristaApp.Update(motorista);

                return RedirectToAction("Index");
            }

            return View(motorista);
        }

        // GET: Motorista/Delete/5
        public ActionResult Delete(Guid id)
        {
            var motoristaViewModel = _motoristaApp.GetById(id);

            return View(motoristaViewModel);
        }

        // POST: Motorista/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(Guid id)
        {
            var motorista = _motoristaApp.GetById(id);
            _motoristaApp.Remove(motorista);

            return RedirectToAction("Index");
        }
    }
    public class ClientesController : Controller
    {
        private readonly IClienteAppService _clienteApp;
        private readonly IEstadoAppService _estadoApp;
        private readonly ICidadeAppService _cidadeApp;
        private readonly IEnderecoAppService _enderecoApp;

        public ClientesController(
            IClienteAppService clienteApp, 
            IEstadoAppService estadoApp, 
            ICidadeAppService cidadeApp, 
            IEnderecoAppService enderecoApp)
        {
            _clienteApp = clienteApp;
            _estadoApp = estadoApp;
            _cidadeApp = cidadeApp;
            _enderecoApp = enderecoApp;
        }

        // GET: Cliente
        public ViewResult Index(string pesquisa, int page = 0)
        {
            var clienteViewModel = _clienteApp.ObterClientesGrid(page * 5, pesquisa);
            ViewBag.PaginaAtual = page;
            ViewBag.Pesquisa = pesquisa;
            ViewBag.TotalRegistros = _clienteApp.ObterTotalRegistros(pesquisa);


            return View(clienteViewModel);
        }


        // GET: Cliente/Details/5
        public ActionResult Details(Guid id)
        {
            var clienteViewModel = _clienteApp.GetById(id);

            return View(clienteViewModel);
        }

        // GET: Cliente/Create
        public ActionResult Create()
        {
            ViewBag.EstadoId = new SelectList(_estadoApp.GetAll().OrderBy(e => e.Nome), "EstadoId", "Nome");
            ViewBag.CidadeId = new SelectList(_cidadeApp.GetAll().OrderBy(c => c.Nome), "CidadeId", "Nome");

            return View();
        }

        // POST: Cliente/Create
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(ClienteEnderecoViewModel clienteEndereco)
        {
            ViewBag.EstadoId = new SelectList(_estadoApp.GetAll().OrderBy(e => e.Nome), "EstadoId", "Nome", clienteEndereco.EstadoId);
            ViewBag.CidadeId = new SelectList(_cidadeApp.GetAll().OrderBy(c => c.Nome), "CidadeId", "Nome", clienteEndereco.CidadeId);

            if (ModelState.IsValid)
            {
                var result = _clienteApp.Add(clienteEndereco);

                if (!result.IsValid)
                {
                    foreach (var validationAppError in result.Erros)
                    {
                        ModelState.AddModelError(string.Empty, validationAppError.Message);
                    }
                    return View(clienteEndereco);
                }

                return RedirectToAction("Index");
            }

            return View(clienteEndereco);
        }

        // GET: Cliente/Edit/5
        public ActionResult Edit(Guid id)
        {
            var clienteViewModel = _clienteApp.GetById(id);

            return View(clienteViewModel);
        }

        // POST: Cliente/Edit/5
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(ClienteViewModel clienteViewModel)
        {
            if (ModelState.IsValid)
            {
                _clienteApp.Update(clienteViewModel);

                return RedirectToAction("Index");
            }

            return View(clienteViewModel);
        }

        // GET: Cliente/Delete/5
        public ActionResult Delete(Guid id)
        {
            var clienteViewModel = _clienteApp.GetById(id);

            return View(clienteViewModel);
        }

        // POST: Cliente/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(Guid id)
        {
            var cliente = _clienteApp.GetById(id);
            _clienteApp.Remove(cliente);

            return RedirectToAction("Index");
        }
    }
    public interface IMotoristaAppService : IDisposable
    {
        ValidationAppResult Add(MotoristaEnderecoViewModel motoristaViewModel);

        MotoristaViewModel GetById(Guid id);
        IEnumerable<MotoristaViewModel> GetAll();
        void Update(MotoristaViewModel motoristaViewModel);
        void Remove(MotoristaViewModel motoristaViewModel);


        int ObterTotalRegistros(string pesquisa);
        IEnumerable<MotoristaViewModel> ObterClientesGrid(int page, string pesquisa);
    }
}

I’m using Ninject to handle the dependencies:

using System;
using System.Collections.Generic;

using ProjetoModelo.Application.Validation;
using ProjetoModelo.Application.ViewModels;

namespace ProjetoModelo.Application.Interfaces
{
    public interface IClienteAppService : IDisposable
    {

        ValidationAppResult Add(ClienteEnderecoViewModel clienteViewModel);
        ClienteViewModel GetById(Guid id);
        IEnumerable<ClienteViewModel> GetAll();


        void Update(ClienteViewModel clienteViewModel);
        void Remove(ClienteViewModel clienteViewModel);
        int ObterTotalRegistros(string pesquisa);
        IEnumerable<ClienteViewModel> ObterClientesGrid(int page, string pesquisa);
    }

public class NinjectModulo : NinjectModule
    {
        public override void Load()
        {
            // app
            Bind<IClienteAppService>().To<ClienteAppService>();
            Bind<IMotoristaAppService>().To<MotoristaAppService>();
            Bind<IProdutoAppService>().To<ProdutoAppService>();
            Bind<IEnderecoAppService>().To<EnderecoAppService>();
            Bind<IEstadoAppService>().To<EstadoAppService>();
            Bind<ICidadeAppService>().To<CidadeAppService>();
            Bind<IFornecedorAppService>().To<FornecedorAppService>();
            Bind<IVendaAppService>().To<VendaAppService>();

            // service
            Bind(typeof(IServiceBase<>)).To(typeof(ServiceBase<>));
            Bind<IClienteService>().To<ClienteService>();
            Bind<IMotoristaService>().To<MotoristaService>();
            Bind<IProdutoService>().To<ProdutoService>();
            Bind<IEnderecoService>().To<EnderecoService>();
            Bind<IEstadoService>().To<EstadoService>();
            Bind<ICidadeService>().To<CidadeService>();
            Bind<IFornecedorService>().To<FornecedorService>();
            Bind<IVendaService>().To<VendaService>();

            // data repos
            Bind(typeof(IRepositoryBase<>)).To(typeof(RepositoryBase<,>));
            Bind<IClienteRepository>().To<ClienteRepository>();
            Bind<IMotoristaRepository>().To<MotoristaRepository>();
            Bind<IProdutoRepository>().To<ProdutoRepository>();
            Bind<IEnderecoRepository>().To<EnderecoRepository>();
            Bind<IEstadoRepository>().To<EstadoRepository>();
            Bind<ICidadeRepository>().To<CidadeRepository>();
            Bind<IFornecedorRepository>().To<FornecedorRepository>();
            Bind<IVendaRepository>().To<VendaRepository>();

            // data repos read only
            Bind<IClienteReadOnlyRepository>().To<ClienteReadOnlyRepository>();
            Bind<IMotoristaReadOnlyRepository>().To<MotoristaReadOnlyRepository>();
            Bind<IFornecedorReadOnlyRepository>().To<FornecedorReadOnlyRepository>();
            Bind<IVendaReadOnlyRepository>().To<VendaReadOnlyRepository>();
            Bind<IProdutoReadOnlyRepository>().To<ProdutoReadOnlyRepository>();

            // ado repos only
            Bind<IClienteADORepository>().To<ClienteADORepository>();
            Bind<IMotoristaADORepository>().To<MotoristaADORepository>();

            // data configs
            Bind(typeof(IContextManager<>)).To(typeof(ContextManager<>));
            Bind<IDbContext>().To<ProjetoModeloContext>();
            Bind(typeof(IUnitOfWork<>)).To(typeof(UnitOfWork<>));

        }
    }

When trying to access the Action Index, I get the following error.

Erro de Servidor no Aplicativo '/'.

O número de argumentos genéricos fornecidos não é igual à aridade da definição do tipo genérico.
Nome do parâmetro: instantiation

Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código. 

Detalhes da Exceção: System.ArgumentException: O número de argumentos genéricos fornecidos não é igual à aridade da definição do tipo genérico.
Nome do parâmetro: instantiation

Erro de Origem: 

Exceção sem tratamento foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.

Rastreamento de Pilha: 


[ArgumentException: O número de argumentos genéricos fornecidos não é igual à aridade da definição do tipo genérico.
Nome do parâmetro: instantiation]
   System.RuntimeType.MakeGenericType(Type[] instantiation) +11721331
   Ninject.Activation.Providers.StandardProvider.GetImplementationType(Type service) +59
   Ninject.Activation.Providers.StandardProvider.Create(IContext context) +100
   Ninject.Activation.Context.ResolveInternal(Object scope) +83
   Ninject.Activation.Context.Resolve() +160
   Ninject.<>c__DisplayClass15.<Resolve>b__f(IBinding binding) +30
   System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +164
   System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +164
   Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) +89
   Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) +333
   Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) +152
   Ninject.Activation.Providers.<>c__DisplayClass4.<Create>b__2(ITarget target) +17
   System.Linq.WhereSelectArrayIterator`2.MoveNext() +58
   System.Linq.Buffer`1..ctor(IEnumerable`1 source) +132
   System.Linq.Enumerable.ToArray(IEnumerable`1 source) +77
   Ninject.Activation.Providers.StandardProvider.Create(IContext context) +474
   Ninject.Activation.Context.ResolveInternal(Object scope) +83
   Ninject.Activation.Context.Resolve() +160
   Ninject.<>c__DisplayClass15.<Resolve>b__f(IBinding binding) +30
   System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +164
   System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +164
   Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) +89
   Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) +333
   Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) +152
   Ninject.Activation.Providers.<>c__DisplayClass4.<Create>b__2(ITarget target) +17
   System.Linq.WhereSelectArrayIterator`2.MoveNext() +58
   System.Linq.Buffer`1..ctor(IEnumerable`1 source) +132
   System.Linq.Enumerable.ToArray(IEnumerable`1 source) +77
   Ninject.Activation.Providers.StandardProvider.Create(IContext context) +474
   Ninject.Activation.Context.ResolveInternal(Object scope) +83
   Ninject.Activation.Context.Resolve() +160
   Ninject.<>c__DisplayClass15.<Resolve>b__f(IBinding binding) +30
   System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +164
   System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +164
   Ninject.Planning.Targets.Target`1.GetValue(Type service, IContext parent) +89
   Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent) +333
   Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) +152
   Ninject.Activation.Providers.<>c__DisplayClass4.<Create>b__2(ITarget target) +17
   System.Linq.WhereSelectArrayIterator`2.MoveNext() +58
   System.Linq.Buffer`1..ctor(IEnumerable`1 source) +132
   System.Linq.Enumerable.ToArray(IEnumerable`1 source) +77
   Ninject.Activation.Providers.StandardProvider.Create(IContext context) +474
   Ninject.Activation.Context.ResolveInternal(Object scope) +83
   Ninject.Activation.Context.Resolve() +160
   Ninject.<>c__DisplayClass15.<Resolve>b__f(IBinding binding) +30
   System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +164
   System.Linq.Enumerable.SingleOrDefault(IEnumerable`1 source) +164
   Ninject.Web.Mvc.NinjectDependencyResolver.GetService(Type serviceType) +64
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +41

[InvalidOperationException: An error occurred when trying to create a controller of type 'ProjetoModelo.MVC.Controllers.MotoristaController'. Make sure that the controller has a parameterless public constructor.]
   System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +178
   System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +76
   System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +88
   System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +194
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50
   System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.0.30319.34274

Repository:

public class MotoristaRepository : RepositoryBase<Motorista, ProjetoModeloContext>, IMotoristaRepository
{
}

public class MotoristaReadOnlyRepository : RepositoryBaseReadOnly, IMotoristaReadOnlyRepository
{

    public Motorista GetById(Guid id)
    {
        using (IDbConnection cn = Connection)
        {
            var sql = @"Select * From Motorista m " +
                      "WHERE m.ClienteId = @sid " +
                      "Select * From EnderecosMotorista em " +
                      "Inner join Endereco e " +
                      "On e.EnderecoId = ec.EnderecoId " +
                      "Inner join Estado s " +
                      "On s.EstadoId = e.EstadoId " +
                      "Inner join Cidade cl " +
                      "On cl.EstadoId = s.EstadoId " +
                      "WHERE em.MotoristaId = @sid";

            cn.Open();

            var multi = cn.QueryMultiple(sql, new { sid = id });
            var motoristas = multi.Read<Motorista>();
            var enderecos = multi.Read<Endereco, Estado, Cidade, Endereco>(
            (ec, e, c) =>
            {
                ec.EstadoId = e.EstadoId;
                ec.MotoristaId = c.CidadeId;
                ec.Estado = e;
                ec.Cidade = c;

                return ec;

            }, "EnderecoId, EstadoId, CidadeId");

            var motorista = motoristas.First();

            foreach (var endereco in enderecos)
            {
                motorista.EnderecoList.Add(endereco);
            }

            return motorista;
        }
    }

    public IEnumerable<Domain.Entities.Motorista> GetAll()
    {
        using (IDbConnection cn = Connection)
        {
            cn.Open();

            var sql = @"SELECT * FROM Motorista
                        ORDER BY Nome asc";

            var motorista = cn.Query<Motorista>(sql);

            return motorista;
        }
    }

    public int ObterTotalRegistros(string pesquisa)
    {
        using (IDbConnection cn = Connection)
        {
            cn.Open();

            var sql = @"SELECT COUNT(NOME) 'Total' FROM Motorista
                      WHERE (@nomePesquisa IS NULL OR Nome Like '%' + @nomePesquisa + '%')";

            var total = (int)cn.ExecuteScalar(sql, new { nomePesquisa = pesquisa });

            return total;
        }

    }

    public IEnumerable<Domain.Entities.Motorista> ObterClientesGrid(int page, string pesquisa)
    {
        using (IDbConnection cn = Connection)
        {
            cn.Open();

            var sql = @"SELECT * FROM Motorista
                        WHERE (@nomePesquisa IS NULL OR Nome Like '%' + @nomePesquisa + '%')
                        ORDER BY Nome asc
                        OFFSET @pagina ROWS
                        FETCH NEXT 5 ROWS ONLY";

            var motoristas = cn.Query<Motorista>(sql, new { nomePesquisa = pesquisa, pagina = page });

            return motoristas;
        }
    }
}



public class MotoristaADORepository : BaseADORepository, IMotoristaADORepository
{
    public IEnumerable<Domain.Entities.Motorista> GetAll()
    {
        var query = "SELECT * FROM Motorista ";
        var motoristasList = new List<Motorista>();

        using (IDataReader reader = Connection.ExecuteReader(CommandType.Text, query))
        {
            while (reader.Read())
            {
                var motorista = new Motorista();
                motorista.MotoristaId = Guid.Parse(reader["MotoristaId"].ToString());
                motorista.Nome = reader["Nome"].ToString();

                motoristasList.Add(motorista);
            }
        }
        return motoristasList;
    }
}
  • 1

    If possible, post the code with the error instead of photos. And when you can, do a [tour] around the site, will help you better understand how it works.

  • Post as well as your IOC (and tell us which framework you’re using)

  • I’m using framework 4.6 and can’t post the part that gives error pq nor enters the code. already appears the direct error screen

  • That’s what I’m saying. Post the mistake you posted as a coded photo, it’s easier for us to analyze.

  • About the IOC, I mean what you’re using to inject the dependencies. Unity, Castle Windsor, Structuremap, Ninject, etc

  • I am using the ninject

  • As you are using Repostitory Pattern, post the classes Motoristareadonolyrepository and Motoristarepository

Show 2 more comments
No answers

Browser other questions tagged

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