I'm having a problem while developing an application in Asp.net MVC with IOC, Automapper and all other screens work perfectly, just not for Drivers. Unable to identify the error, could they help me? Follow the controllers, and the other classes, if you need 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 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;
}
}