asp.net - 为什么即使我使用 ninject 注入依赖项,我也会收到 MissingMethodException?
问题描述
当我尝试访问“考试”视图时,出现此错误。我不明白,因为一切似乎都很好。
错误:
[MissingMethodException:没有为此对象定义没有参数的构造函数。] System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean & canBeCached,RuntimeMethodHandleInternal & ctor,Boolean & bNeedSecurityCheck)+0 System.RuntimeType.CreateInstanceSlow( Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark & stackMark) +122 System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark & stackMark) +239 System.Activator.CreateInstance (Type type, Boolean nonPublic) +85 System.Activator.CreateInstance (Type type) +12 System.Web.Mvc.DefaultControllerActivator.Create (RequestContext requestContext, Type controllerType) +55
[InvalidOperationException:尝试创建类型为“ConsultaH.MVC.Controllers.ExamesController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。] System.Web.Mvc.DefaultControllerActivator.Create (RequestContext requestContext, Type controllerType) +178 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance (RequestContext requestContext, Type controllerType) +80 System.Web .Mvc.DefaultControllerFactory.CreateController (RequestContext requestContext, String controllerName) +102 System.Web.Mvc.MvcHandler.ProcessRequestInit (HttpContextBase httpContext, IController & controller, IControllerFactory & factory) +188 System.Web.Mvc.MvcHandler.BeginProcessRequest (HttpContextBase httpContext ,AsyncCallback 回调,对象状态)+50 System.Web.Mvc.MvcHandler。
我在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 的包。
推荐阅读
- java - Java-无法将 1000 批插入表中
- c++ - 解决产生无限循环的数组问题时遇到问题
- emacs - Emacs Diary 的 diary-float 查询
- sql - SQL Group By 和更改分组值
- c# - 复选框中的 asp-for 在 asp.net 核心中抛出和错误
- php - 如何在php中将新数组值添加到标头
- java - Jmeter JavaSampler - 我们可以传递已经在 Jmeter WDS 中创建的 WebDriver 实例吗?
- angular - Angular 与 CodeIgniter
- ibm-cloud - 如何将 IBM Cloud Functions 与 App ID 集成以进行身份验证?
- python - 如何在 virtualenv 中强制安装包?