【发布时间】:2013-11-21 17:29:32
【问题描述】:
我正在测试 Ninject,但是按照操作方法,我发现它无法正常工作。网上的信息乱七八糟,甚至自相矛盾。我正在 Visual Studio 2012 上的 MVC 4 中开发一个网站,我确实使用 Nuget 安装了 Ninject。
所以我得到一个错误:“没有为此对象定义无参数构造函数。”。一旦我进入我的控制器。
我做了必要的步骤:
- Nuget 安装
- 在 NinjectWebCommon.cs 中,我确实在 RegisterServices 方法中注册了我的接口。
-
在我的家庭控制器中,我这样设置我的对象:
public ISurvey _survey { get; set; } [Inject] public HomeController(ISurvey s) { _survey = s; }
我收到以下错误消息:
“/”应用程序中的服务器错误。 没有为此对象定义无参数构造函数。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。 异常详细信息:System.MissingMethodException:没有为此对象定义无参数构造函数。 源错误: 在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。 堆栈跟踪: [MissingMethodException:没有为此对象定义无参数构造函数。] System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型,Boolean publicOnly,Boolean noCheck,Boolean& canBeCached,RuntimeMethodHandleInternal& ctor,Boolean& bNeedSecurityCheck) +0 System.RuntimeType.CreateInstanceSlow(布尔 publicOnly,布尔 skipCheckThis,布尔填充缓存,StackCrawlMark 和 stackMark)+113 System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +232 System.Activator.CreateInstance(类型类型,布尔非公共)+83 System.Activator.CreateInstance(类型类型)+6 System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +110 [InvalidOperationException:尝试创建类型为“Surveys.Controllers.HomeController”的控制器时发生错误。确保控制器有一个无参数的公共构造函数。] System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +247 System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +438 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +226 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& 控制器, IControllerFactory& 工厂) +326 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback 回调, 对象状态) +177 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback 回调, 对象状态) +88 System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +50 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
所以我想知道我做错了什么? 4 小时后,我发现我的 web.config 文件可能有问题,或者可能是缺少引用,或者可能是工厂丢失。现在我什至不知道该怎么办。感谢您的帮助。
【问题讨论】:
-
可以添加NinjectWebCommon.cs的内容吗?
-
可以添加ISurvey实现的内容吗?顺便说一句,您不需要使用 Inject 属性装饰构造函数,但我认为这对您的问题没有任何影响。