确保控制器具有无参数的公共构造函数

时间:2014-06-03 12:00:17

标签: c# .net asp.net-mvc asp.net-mvc-4

我收到此错误

  

尝试创建类型为' AnalyticController'的控制器时发生错误。确保控制器具有无参数的公共构造函数。

代码在测试环境中工作,但不在生产服务器上工作。

知道什么可能导致问题吗?

这是我的控制器

public class AnalyticController : ApiController
{
    private AnalyticBLL analyticBLL = new AnalyticBLL();

    // POST api/status
    public void Post(AnalyticDTO analyticDTO)
    {
        if (!analyticBLL.Register(analyticDTO))
            helpers.BusinessLayer.CreateResponseException(analyticBLL.Errors);   
    }
}

4 个答案:

答案 0 :(得分:12)

这取决于你如何处理DI(依赖注入)。默认情况下,控制器需要无参数构造函数,您必须使用Unity或Ninject之类的东西来处理DI。我发现你从ApiController中获得了很多,所以如果你使用的是Ninject,请确保你下载Ninject for Web API。如果您已经知道我刚刚告诉您的所有内容,那么您需要提供更多信息。你的设置是什么? DI你用的是什么?

答案 1 :(得分:7)

添加一个公共无参数构造函数,问题就消失了:

public class AnalyticController : ApiController
{
   public AnalyticController()
   {
   }

   // Variables and methods are the same as before
}

答案 2 :(得分:4)

我收到此错误是因为我的参数-ful构造函数中发生了异常。尽管有错误消息,它与要求无参数构造函数无关。

答案 3 :(得分:0)

不知道这是否会对其他人有所帮助。我建立&然后在我的本地(开发)框上运行我的应用程序对所有Web服务。然后在我部署到生产之前,我运行我的应用程序指向现有的生产Web服务。这通常有效,但这一次,它在开发中工作了#34;但是给了我这个"确保控制器有一个无参数的公共构造函数"生产错误消息"" (好吧,不是真正的生产,而是生产网络服务)。

这些解决方案似乎都不是我的代码的问题,当我将代码部署到生产时,我没有在生产中出现此错误。我的猜测是它可能与我的开发盒和放大器之间的不同版本的NuGet包有关。生产。我会调查一下,但我只是想提出这个问题,以防其他人有类似的情况,而不是开发人员,而不是刺激他们。#34;情况。这可能是一个环境问题(取决于你的意思不起作用" prod")。

相关问题