问题描述
当我尝试访问“考试”视图时,出现此错误。我不明白,因为一切似乎都很好。
错误:
[MissingMethodException:没有为此对象定义没有参数的构造函数。] System.RuntimeTypeHandle.CreateInstance(RuntimeType类型,布尔publicOnly,布尔noCheck,布尔&canBeCached,RuntimeMethodHandleInternal和ctor,布尔&bNeedSecurityCheck)+0 System.RuntimeType.CreateInstanceSlow(布尔publicOnly,布尔skipCheckThis,布尔fillCache,StackCrawlMark和stackMark)+122 System.RuntimeType.CreateInstanceDefaultCtor(布尔publicOnly,布尔skipCheckThis,布尔fillCache,StackCrawlMark和stackMark)+239 System.Activator.CreateInstance(类型类型,布尔型非公共)+85 System.Activator.CreateInstance(类型类型)+12 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,类型controllerType)+55
[InvalidOperationException:尝试创建类型为'ConsultaH.MVC.Controllers.ExamesController'的控制器时发生错误。确保控制器具有无参数的公共构造函数。] System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext,类型controllerType)+178 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext,类型controllerType)+80 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext,字符串controllerName)+102 System.Web.Mvc.MvcHandler.ProcessRequestinit(HttpContextBase httpContext,IController和控制器,IControllerFactory和工厂)+188 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,AsyncCallback回调,对象状态)+50 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext,AsyncCallback回调,对象状态)+48 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext上下文,AsyncCallback cb,对象exTradata)+16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+105 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep步骤)+50 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值,已完成并同步)+163
我在 NinjectWebCommon.cs 中的代码:
private static void RegisterServices(IKernel kernel)
{
kernel.Bind(typeof(IAppServiceBase<>)).To(typeof(AppServiceBase<>));
kernel.Bind<IPacienteAppService>().To<PacienteAppService>();
kernel.Bind<IExameAppService>().To<ExameAppService>();
kernel.Bind<ITipoExameAppService>().To<TipoExameAppService>();
kernel.Bind<IConsultaAppService>().To<ConsultaAppService>();
kernel.Bind(typeof(IServiceBase<>)).To(typeof(ServiceBase<>));
kernel.Bind<IPacienteService>().To<PacienteService>();
kernel.Bind<IExameService>().To<ExameService>();
kernel.Bind<ITipoExameService>().To<TipoExameService>();
kernel.Bind<IConsultaService>().To<ConsultaService>();
kernel.Bind(typeof(IRepositoryBase<>)).To(typeof(RepositoryBase<>));
kernel.Bind<IPacienteRepository>().To<PacienteRepository>();
kernel.Bind<IExameRepository>().To<ExameRepository>();
kernel.Bind<ITipoExameRepository>().To<TipoExameRepository>();
kernel.Bind<IConsultaRepository>().To<ConsultaRepository>();
}
我的 ExamesController.cs 类:
public class ExamesController : Controller
{
private readonly IExameAppService _exameApp;
public ExamesController(IExameAppService exameApp)
{
_exameApp = exameApp;
}
// GET: Exame
public ActionResult Index()
{
var exames = _exameApp.GetAll();
var exameviewmodel = Mapper.Map<IEnumerable<Exame>,IEnumerable<Exameviewmodel>>(exames);
return View(exameviewmodel);
}
}
我在方法 CreateKernel()的类 NinjectWebCommon.cs 中放置了一个断点,尝试执行后到达第一行时总是出现错误,此错误在运行时发生。参见下面的代码:
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
try
{
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel); // <= This line
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
RegisterServices(kernel);
return kernel;
}
catch
{
kernel.dispose();
throw;
}
}
解决方法
解决此错误所需要做的就是卸载Ninject默认软件包并安装名为Ninject MVC5的软件包。