Asp.net 为什么即使我用ninject注入依赖项,我也会得到MissingMethodException?
当我尝试访问“考试”视图时,会出现此错误。我不明白,因为一切似乎都很好 错误: [MissingMethodException:没有为此对象定义没有参数的构造函数。] System.RuntimeTypeHandle.CreateInstance(RuntimeType类型、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandleInternal&ctor、Boolean&bNeedSecurityCheck)+0 System.RuntimeType.CreateInstanceSlow(布尔publicOnly、布尔skipCheckThis、布尔fillCache、StackScrawMark&堆叠标记)+122 System.RuntimeType.CreateInstanceDefaultCtor(布尔publicOnly、布尔skipCheckThis、布尔fillCache、StackScrawlMark&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,String controllerName)+102 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext、IController和controller、IControllerFactory和factory)+188 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext,异步回调,对象状态)+50 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext HttpContext,异步回调,对象状态)+48 System.Web.Mvc.MvcHandler.System.Web.IHTTPassynchandler.BeginProcessRequest(HttpContext上下文、AsyncCallback cb、Object extraData)+16 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+105 System.Web.HttpApplication.executesteppl(IExecutionStep步骤)+50 System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+163 我在NinjectWebCommon.cs中的代码Asp.net 为什么即使我用ninject注入依赖项,我也会得到MissingMethodException?,asp.net,asp.net-mvc,dependency-injection,asp.net-mvc-5,ninject,Asp.net,Asp.net Mvc,Dependency Injection,Asp.net Mvc 5,Ninject,当我尝试访问“考试”视图时,会出现此错误。我不明白,因为一切似乎都很好 错误: [MissingMethodException:没有为此对象定义没有参数的构造函数。] System.RuntimeTypeHandle.CreateInstance(RuntimeType类型、Boolean publicOnly、Boolean noCheck、Boolean&canBeCached、RuntimeMethodHandleInternal&ctor、Boolean&bNeedSecurityChe
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>();
}
私有静态无效注册服务(IKernel内核)
{
Bind(typeof(IAppServiceBase)).To(typeof(AppServiceBase));
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
Bind(typeof(IServiceBase)).To(typeof(ServiceBase));
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
Bind(typeof(IRepositoryBase)).To(typeof(RepositoryBase));
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().To();
}
我的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);
}
}
公共类ExamesController:控制器
{
私有只读IEXamAppService_ExamApps;
公共exameApp控制器(IEXameApp服务exameApp)
{
_exameApp=exameApp;
}
//获取:Exame
公共行动结果索引()
{
var exames=_exameApp.GetAll();
var exameViewModel=Mapper.Map(exames);
返回视图(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;
}
}
private静态IKernel CreateKernel()
{
var kernel=新的标准内核();
尝试
{
kernel.Bind().ToMethod(ctx=>()=>new Bootstrapper().kernel);//解决此错误所需的全部操作是卸载Ninject默认软件包并安装名为Ninject MVC5的软件包。这可能会有所帮助